0

http://docs.oracle.com/javase/6/docs/api/java/security/KeyStore.html

在下面的代码中,java 应用程序向用户请求密码:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

// get user password and file input stream
char[] password = getPassword();
java.io.FileInputStream fis =
    new java.io.FileInputStream("keyStoreName");
ks.load(fis, password);
fis.close();

这是否意味着应用程序可以获取我的数字证书密码,即使它位于智能卡上并可能将其用于其他用途?

4

1 回答 1

2

是的,另一个具有足够权限的应用程序可以从内存中读取密码的内容,或者在输入键盘时窥探密码。

代码示例显示了存储为char数组的密码,这是推荐的做法。与 immutable 不同,这样的数组可以在使用密码后重置为不同的值String。这会最小化攻击窗口,但不会删除它。

一些智能卡制造商提供外部 PIN 键盘设备,以确保将密码直接传送到卡上。您可以考虑研究其中一种解决方案。

于 2012-08-04T12:01:17.027 回答