Java生成特定于机器的加密密钥



我正在编写一个类,该类将加密对象的映射序列化到文件中,以维护用户登录数据等。
其思想是能够始终在同一台机器上使用此类恢复和解密数据,但不能在其他机器上使用
为此(正如本文和其他文章中所建议的),我正在迭代网络接口的硬件地址,同时使用它们来散列默认的常量密钥:

byte[] key = getConstKey();
Enumeration<NetworkInterface> inters = networkInterface.getNetworkInterfaces();
while (inters.hasMoreElements()) {
    NetworkInterface inter = inters.nextElement();
    if (inter.getHardwareAddress() == null) {
      continue;
    }
    hashKeyAccordingToAddress(key, inter.getHardwareAddress());
}

这很有效,通过了我所有的测试,直到有一天我把笔记本电脑带出办公室。。。

显然,当我更改网络时,一些网络地址已经更改,或者接口已经添加/删除。我的假设是,只有真正的硬件修改才会更改生成的密钥。我想我错了。

有没有办法让它更健壮,比如只使用更稳定的特定NetworkInterface?或者有更好的方法来生成机器唯一的持久密钥吗?

更新:更具体地说,当我从办公室外连接到VPN服务时,问题就开始了。由于一些登录详细信息用于通过此VPN连接到服务,我的解决方案变得毫无用处。。

您可以使用受信任的平台模块(TPM),大多数较新的系统都有可用的TPM。有关访问TPM的可能简单方法,请参阅此库。将您的唯一密钥存储在TPM上。

相关内容

  • 没有找到相关文章

最新更新