我有一个数据.目前,它是一个XML文件,但架构可能会发生变化.所以我们暂时假设它是一个C#类.
当我将数据存储在磁盘或数据库中时,我需要添加某种签名或指纹或校验和或其他任何内容,以确保没有人可以修改数据.警告:即使是有权访问所有源代码的管理员或开发人员也不应该修改它.
我假设由于具有完全代码访问权限的人可以轻松地创建新签名(签名需要以编程方式完成,因此无需手动密码短语输入),签名在某种程度上需要包含一些其他数据.理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串.
我的一般方法是使用对称加密.我从所有字段生成哈希,即SHA-512,然后使用哈希作为密码加密该哈希和我的附加数据以获取我的签名.要解密,我的函数会根据文件中的实际数据生成哈希值,并尝试解密签名.这不会是防篡改的,因为很容易生成签名日期和附加信息仍然完整的签名.
由于我不是该领域的专家,我相信我正在尝试重新发明轮子,而且它不是一个非常好的轮子.我只是想知道是否有一些标准方法?我相信我的部分请求是不可能的(毕竟,如果有人控制整个环境,那个人也会控制系统时间),但我仍然想知道这通常是如何解决的?
我正在使用C#编程系统.我的程序生成一个我想要存储在硬盘上的小消息(文件的哈希摘要) - 但我不希望用户能够读取它.我打算加密这条消息,但有人建议这是一个不好的想法.
所以我正在寻找替代方案 - 您如何保护完全信任的用户的一些秘密信息?
伙计们,
我们有一个有趣的技术挑战.如何编写一个跟踪软件使用情况的安全审计文件,以便许可证费用可以根据使用情况进行,从而使那些使用它的人更容易负担得起.
具体来说,TickZoom为对冲基金出售alpha代交易平台,目前每月需要2000美元才能获得许可,包括支持(将很快增加到两倍以上).这对机构来说很好,但对个人来说太贵了.个人经常要求更低的价格换取使用软件赚取的利润的百分比,直到他们能够支付固定费用为止.
我们喜欢这个提议.但我们需要一种可靠的方法来审核平台上实际产生的利润,以及通过删除或覆盖审计文件来阻止用户"游戏"它的方法,从而报告收益低于实际收益.
此应用程序是用C#编写的,系统的这一部分是混淆的,至少使解密代码变得困难.
另一个要求是针对每次发生的交易写入文件,以便在用户认为总费用存在差异的情况下允许更深入的审核.这样,个人贸易利润可以与经纪人的陈述进行比较.
当然,假设文件将被加密.
但任何关于如何使其"防篡改"的想法?特别是针对简单的删除尝试?
我的第一个猜测是让软件始终需要一个预先存在的审计文件,否则它将拒绝运行.
然后,当我们交付软件时,它会打包一个"空"审计文件,但事实上,它有某种防篡改验证.
用户可能试图"篡改"文件的下一个显而易见的技术是让某人简单地备份原始的"空"文件,然后用它来覆盖审计文件,从而欺骗系统认为这是一个新的开始.
也许这可以通过包含某种"最后更新时间戳"和到期时间来解决.
此外,欢迎完全不同的解决方案想法.在这种情况下,我们可能会被迫添加"电话回家"功能,以便交易记录到我们的中央服务器.但这似乎是不利的,并可能在关键任务应用程序中增加另一个失败点.一般来说,他们非常不喜欢"手机之家"功能,原因很明显.
真诚的,Waynek