簡體   English   中英

使用RSA私鑰加密消息是否安全?

[英]Is it safe to use RSA private key to encrypt a message

我想分發加密的消息,只有我可以加密,但是每個人都可以解密。 我正在使用以下代碼執行任務。 它可以工作,但是我想知道是否存在任何安全問題?

我知道通常的用法是使用RSA公鑰進行加密,並使用私鑰進行解密(但我的用例是相反的)。 我也不想在這里使用java.security.Signature。

用例:我想通過電子郵件將服務器上的配置文件發送到客戶端,而收件人不能以明文形式閱讀配置。 一旦將配置文件導入到配置目錄中,則在安裝過程中具有服務器公鑰的應用程序將能夠解密該配置文件。

public static final String ALGORITHM = "RSA/ECB/PKCS1Padding";

public Cipher createCipher(final int encryptionMode, final Key key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
    final Cipher cipher = Cipher.getInstance(ALGORITHM);
    cipher.init(encryptionMode, key);
    return cipher;
}

public byte[] encryptString(final String text, final PrivateKey privateKey) throws GeneralSecurityException, IOException {
    return createCipher(Cipher.ENCRYPT_MODE, privateKey).doFinal(text.getBytes("UTF-8"));
}

public String decryptString(final byte[] msg, final PublicKey publicKey) throws GeneralSecurityException, IOException {
    final byte[] decrypted = createCipher(Cipher.DECRYPT_MODE, publicKey).doFinal(msg);
    return new String(decrypted, "UTF-8");
}

// me 
final PrivateKey privateKey = ... read from file ...
final byte[] msg = encryptString("my-secret-text-that-everybody-can-read-but-only-I-can-generate", privateKey);

// other person
final PublicKey publicKey = ... read from file ...
final String text = decryptString(msg, publicKey));

感謝@Maarten Bodewes的評論,它回答了我的問題。

我投票結束這個問題是因為離題,因為盡管該問題包含代碼,但實際上這是一個關於密碼學的概念性問題,之前曾被問到過-Maarten Bodewes

從他提供的鏈接中 ,我的問題的答案是:“不,您通常不能交換公鑰和私鑰。”

通過在公共指數中使用較小的素數,它只會危及RSA的安全性。 這是詳細的答案:

您的公共密鑰由公共指數和模數組成。 模數應為進行加密的人員所知。 一般而言,公共指數是一個相對較小的素數,例如3或65537(費馬四號)。 因此,給定攻擊者所需的模數,便是猜測公鑰。 分解非常小的指數非常容易(我已經編寫了軟件來生成給定私鑰的公鑰)。 另一方面,私鑰的指數由一個約等於模數的數字組成。 它不容易被分解; RSA的安全性取決於這一事實。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM