亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我是否應該驗證 RSA 包生成的用戶密鑰對是唯一的(其他用戶沒有相同的密鑰對)?

我是否應該驗證 RSA 包生成的用戶密鑰對是唯一的(其他用戶沒有相同的密鑰對)?

Go
jeck貓 2022-06-21 16:58:08
我最近使用數字簽名,想弄清楚如何讓每個注冊的用戶都有自己的密鑰對用于編碼和解碼過程。我使用 Go 構建這種系統,并使用Go中的crypto/rsa 包。我已經閱讀了一些關于如何制作安全數字簽名并找到很多東西的文章。然后,我嘗試構建用于保護非對稱加密過程的第一件事。然后,我面臨的第一個問題是我問自己一個問題“我應該創建一個驗證,以確保沒有其他用戶擁有 RSA 包生成的密鑰對嗎?” 這樣可以確保每個用戶都不會因為他們擁有相同的密鑰對而意外或故意假裝為其他用戶(即使機會非常?。U埥o我一些關于這種情況的見解。如果我的問題不夠清楚,請隨時提出或投訴,我真的很難為我的用戶和系統考慮任何安全方面。import (    "crypto/rand"    "crypto/rsa"    "encoding/pem"    ...)...func createKeyPairs(userRegistered *User) (err error) {    keyPairs, err := rsa.GenerateKey(rand.Reader, 4096)    if err != nil {        return err    }    // SHOULD I ADD SOME VALIDATION FOR THE KEYPAIRS GENERATED BY CRYPTO RSA AND RAND PACKAGE HERE    caPrivateKeyPEMFile, err := os.Create(userRequestingCA.ID + "PrivateKey.pem")    pem.Encode(caPrivateKeyPEMFile, &pem.Block{        Type:  "RSA PRIVATE KEY",        Bytes: x509.MarshalPKCS1PrivateKey(keyPairs),    })    caPublicKeyPEMFile, err := os.Create(userRequestingCA.ID + "PublicKey.pem")    pem.Encode(caPublicKeyPEMFile, &pem.Block{        Type:  "RSA PUBLIC KEY",        Bytes: x509.MarshalPKCS1PublicKey(&keyPairs.PublicKey),    })}
查看完整描述

1 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

不,你不應該。

主要是因為嚴格的私鑰比較是不夠的,你需要確保模數中的兩個素數不同。

第二個原因是它幾乎毫無意義:選擇相同素數的可能性非常低,你只是在浪費時間。

給定一個 4096 位 RSA 密鑰,您正在尋找兩個 2048 位素數。這些碰撞的可能性很小。

它可能有用的一種情況是,如果你的機器上有可怕的熵。但是你可能還有其他問題,這可能是一個單獨的問題。

有關模素數為何重要(與原始密鑰內容相反)的更多詳細信息,以及計算素數沖突可能性的詳細信息,請參閱此 security.se 問題

第三個原因是它需要您保留所有用戶私鑰的參數。您絕對不應該,而且您可能一開始就不應該代表他們生成密鑰對。


查看完整回答
反對 回復 2022-06-21
  • 1 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號