Lop*_*per 7 java security android cryptography secret-key
以下java代码是否足以清除内存中的密钥(将其所有字节值设置为0)?
zerorize(SecretKey key)
{
byte[] rawKey = key.getEncoded();
Arrays.fill(rawKey, (byte) 0);
}
Run Code Online (Sandbox Code Playgroud)
换句话说,该getEncoded方法是否返回实际密钥的副本或引用?如果返回副本,那么如何清除密钥作为安全措施?
换句话说, getEncoded 方法是否返回实际密钥的副本或引用?
key.getEncoded()将返回对数组的引用。
如果执行 Array.fill 时 key 的内容被丢弃,则取决于返回的数组是否支持该 key 。鉴于文档,在我看来,密钥的编码似乎是密钥的另一种表示形式,即密钥不受返回的数组支持。
不过很容易找出来。请尝试以下操作:
byte[] rawKey = key.getEncoded();
Arrays.fill(rawKey, (byte) 0);
byte[] again = key.getEncoded();
Log.d(Arrays.equals(rawKey, again));
Run Code Online (Sandbox Code Playgroud)
如果输出是false,则您知道密钥仍然存储在 中SecretKey。
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |