2017-03-01 55 views
0

我们想在客户站点创建一个日志文件,其中Verifyable日志文件

  • 客户能够读取日志(明文)
  • 我们可以验证我们的网站日志文件ISN不可操纵

数据字节不可读没问题。但是,有些客户不会向我们发送无法验证他们不包含合理数据的文件。

我目前唯一合理的选择是附加密码校验和(例如SHA256(SECRET_VALUE + "logtext"))。 SECRET_VALUE将是硬编码,这是简单的“security through obscurity”。有没有更好的方法?

我们使用DotNet库,我不想手工实现任何加密算法。

回答

1

您可以使用标准HMAC算法和密钥来执行校验和。

使用密钥可以以简单的方式防止校验和直接重新生成。硬编码密钥可以从代码中提取,但对于您的用例,我认为已足够

结果是二进制散列。要将其插入到文本文件中,请将值编码为十六进制或base64,并确保您能够恢复服务器端的进程,以便您可以再次使用原始文件计算哈希值。

你也可以使用一个分离的散列文件,以避免在我们身边修改日志文件

+0

感谢您指出我的HMAC收集 - 上救了我重新发明轮子 –

0

目标

  • 客户可读的日志文件
  • verifyable
  • 最小的二进制数据
  • 绝离线工作

选项

  • 公私密钥的东西......(RSA,......)
    • 将安全
    • 但只有二进制数据
  • 添加签名

可信时间戳

    再次
  • :我们不是第一个(https://en.wikipedia.org/wiki/Trusted_timestamping
  • 需要连接到“受信任的第三方派对“(指Web服务)
  • 构建哈希+时间戳 - >发送给第三方 - >签署数据(公钥 - 私钥) - >发送b ACK

迄今为止最好的

  • 选项添加签名与HMAC
  • 存储在本机代码的关键(不是那么容易提取)
  • 获取代码混淆运行,并建立一些额外的循环在C#
  • 每隔一段时间(5分钟?)将日志的签名放入Windows应用程序日志中
  • 应用程序日志中至少基本上固定以防止修改(只读) 并且它是由我们的错误报告
  • 容易被顾客监督(邪恶的笑容)