生成的RSA公钥和私钥模数在Java/Android中是相同的

问题描述 投票:0回答:1

我是密码学的新手,可能我问了一个愚蠢的问题,但我一直无法找到答案。我正在 POC Android 项目中用 Java 生成 RSA 密钥。我的目的是使用公钥加密用户密码,并使用服务器中的私钥对其进行解密,应用此功能还可以让我以更安全的方式(加密)将密码保存在设备中,以便在以下情况下自动使用它:使用指纹验证。我正在使用常规 Java 方法生成密钥:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key = keyGen.generateKeyPair();
PublicKey publicKey = key.getPublic();
PrivateKey privateKey = key.getPrivate();

然后我就以这种方式将两个密钥记录到 Android Studio Logcat:

Log.e(TAG, "Public key: " + publicKey);
Log.e(TAG, "Private key: " + privateKey);

...这就是我记录的内容:

10-18 15:27:17.570 22426-22426/cliu.tutorialcrypto E/AsymmetricAlgorithmRSA: Public key: OpenSSLRSAPublicKey{modulus=c1312eb5c24da9577dd40263cec233b8be40ed227b81df3c442363f1dfd5364e9e2ba96d4dd7c1011d2633d6603beb1a483b75b8af8a87b10ebe918729b6afe95893d5c93b3f99727785110f2373d20ced8bfe2421c9c682ee737c60a7c6199be3d2e7e4687d69cedc50965b8cebc4445cdfe7a13a7df5eda6a6d4304d057505,publicExponent=10001}
10-18 15:27:17.570 22426-22426/cliu.tutorialcrypto E/AsymmetricAlgorithmRSA: Private key: OpenSSLRSAPrivateCrtKey{modulus=c1312eb5c24da9577dd40263cec233b8be40ed227b81df3c442363f1dfd5364e9e2ba96d4dd7c1011d2633d6603beb1a483b75b8af8a87b10ebe918729b6afe95893d5c93b3f99727785110f2373d20ced8bfe2421c9c682ee737c60a7c6199be3d2e7e4687d69cedc50965b8cebc4445cdfe7a13a7df5eda6a6d4304d057505,publicExponent=10001}

问题:为什么生成的密钥中的模数相等?我认为这不够安全,因为只要有公钥模数,某人就可以轻松地想出私钥,对吗?

java android encryption rsa
1个回答
4
投票

您生成的是 Java 的密钥pair。密钥对的公钥和私钥始终共享相同的模数:计算在该域内执行。

保持安全的不是模数,而是私有指数以及(通常也是可用的)使用中国剩余定理 (CRT) 执行快速求幂所需的参数。这些基本上是用于计算私钥和模数的参数,例如素数 P 和 Q。

实际上,您可以使用模数来确定密钥是唯一的,因为每个密钥对都应该具有唯一的模数。这样您还可以检查公钥和私钥是否属于同一对的一部分 - 无需进行签名生成/验证。


私有指数和CRT参数当然不会被打印;模数足以识别私钥,您不会希望通过打印它们来破坏私钥的安全性。

如果您想查看私有指数和 CRT 参数,请 cast 将您的私钥转换为

RSAPrivateCrtKey
并使用该类的 getter。如果您只需要私有指数,那么转换为
RSAPrivateKey
就不容易出错。在强制转换之前首先检查变量的类型是个好主意,除非您同意可能的
ClassCastException
。一般来说,软件生成器会创建一个
RSAPrivateCrtKey
,尽管 CRT 参数的使用似乎没有明确指定。

请注意,只有基于软件的密钥才可能让 getter 返回信息,因此请注意,如果密钥可能存储在智能卡或 HSM 等硬件设备中,则尝试获取私有参数时,您可能必须处理运行时异常.

© www.soinside.com 2019 - 2024. All rights reserved.