Encryption

將 64 位整數減少到 10 位

  • June 19, 2020

情況:-

我正在使用 Python。我正在使用 RSA,並且正在使用兩個 64 位密鑰。我不是密碼學家。如果需要,我可以為您提供 RSA 程式碼,但我不會發布它,因為它不必對問題做任何事情。我必須把私鑰交給一個人才能記住64位密鑰據了解,普通人無法記住。

問題: -

我想要一種將我的 64 位密鑰壓縮到至少 10 位整數的方法,以及在輸入這 10 位數字時將它們解壓縮回 64 位密鑰的方法。

我嘗試過的解決方案: - 將我的 64 位整數序列轉換為字元串片語或字元串(最糟糕的想法浪費了很多時間不要自己嘗試)。

使用基本的數學運算,例如“除法”、“減法”等。事實證明這不是一個好習慣,因為它在程式碼中很容易閱讀。

筆記

I need not to change the private key whenever programs run but whenever client wishes to.

如果不可能在事後將 64 位 RSA 密鑰(也不是 64 位素數)可逆地壓縮為 10 位數字:此類密鑰或素數太多,無法為其分配唯一的 10 位數字值。在這種大小下,RSA 是完全不安全的,我的意思是在幾分之一秒內就可以破解。即使 640 位也不安全,請參閱那裡的歷史記錄或分解記錄。

但是,這是為 RSA 使用安全參數並安排事情的幾種方法,以便可以將需要解密的內容記住為 10 位數字(或簡短的密碼或單詞序列:這對大多數人來說更容易)。

  1. 經典的方法,例如在 PGP/GPG 和 OpenSSL 中使用,是使用普通的 RSA 密鑰(例如,4096 位)並在靜止時使用基於密碼的加密對其進行加密,使用 10 位值作為密碼/密碼。那是對稱密碼學,對稱密鑰通過故意的慢散列函式從密碼(和salt)派生,例如Argon2scrypt ……

當需要私鑰時,執行密碼片語到密鑰的慢散列,恢復對稱密鑰,然後用於解密 RSA 私鑰(儲存在文件中,但這裡可能在數據庫中)。公鑰以明文形式儲存(無論如何都不是秘密)。 2. 一個不太常見的選項是使用加密安全偽隨機數生成器 (CSPRNG) 生成 RSA 密鑰中的素數,該生成器由上述派生的密鑰播種。當需要私鑰時,執行密碼片語到密鑰的慢速雜湊,恢復對稱密鑰,然後用於播種 CSPRNG 並重新生成與最初相同的 RSA 私鑰。

2 的優點是不可能失去私鑰的加密版本,因為不需要。它的缺點是無法更改密碼,並且我們失去了抵禦攻擊的第一道防線:我們通常會嘗試將加密的私鑰保持在攻擊者無法觸及的範圍內。

引用自:https://crypto.stackexchange.com/questions/81435