Rsa

TLS 中 TOTP 的密鑰生成

  • November 3, 2016

所以最近我一直在研究 TLS 協議。特別是,通過RFC 2246的第 7.4.7.1 節,即RSA Encrypted Premaster Secret Message,我遇到了:

如果 RSA 用於密鑰協商和身份驗證,客戶端生成一個 48 字節的預主密鑰,使用伺服器證書中的公鑰或伺服器密鑰交換消息中提供的臨時 RSA 密鑰對其進行加密,並將結果以加密的 premaster 秘密消息。此結構是客戶端密鑰交換消息的變體,而不是消息本身。

在伺服器端,我使用伺服器 RSA 私鑰解密了一個*“.key.enc”文件。*輸出如下:

otpauth://totp/381151134?secret=X2WXGSZ5LSZ66TX6AGL4DIJ6XJAAEJQ2ZUJDM4KJFNWAJOD4GI7Q

我還讀到 48 個字節中的 46 個字節是隨機生成的。但是,我相信我在這裡弄錯了,因為輸出文件中顯然沒有 46 字節隨機性的跡象。

據我所知381151134稱為*“標籤”“TOTP”代表“基於時間的一次性密碼”“OTPAUTH”*確定身份驗證方案。

有人可以指出我在這裡可能遺漏或出錯的地方嗎?


除此之外,我還有另一個相關的問題:

IBM 知識中心指出……

對於伺服器身份驗證,客戶端使用伺服器的公鑰來加密用於計算密鑰的數據

……但他們沒有提供有關如何完成的任何詳細資訊。

您能否另外指出我的參考論文或一些描述秘密**X2WXGSZ5LSZ66TX6AGL4DIJ6XJAAEJQ2ZUJDM4KJFNWAJOD4GI7Q** 是如何生成的文件?我知道這是 Base32 編碼。但是,我特別詢問編碼之前的步驟,可能使用 256 位輸出雜湊算法(例如 SHA256),因為有 52 個 Base32 字元。

編輯: 根據評論,我的問題目前的形式似乎含糊不清。更多詳細資訊:

我已經能夠使用SECRET生成 TOTP 程式碼。我能夠使用SECRET對伺服器進行身份驗證。因此,我猜SECRET是一個 HMAC 密鑰。然而,這裡的主要問題是,秘密是如何生成的。關於與 TLS 的連接,IBM Knowledge Center 中的上一個連結聽起來很有參考性。此外,正如我上面提到的,OTPAUTH連結使用 RSA 公鑰加密並發送到伺服器。我(可能錯誤地)認為這是 TLS 中握手過程的一部分

您似乎在這裡混淆了一些東西,主要是 OTP 方案和 TLS。

兩者之間確實沒有很強的關係,除了可能經常使用 OTP 方案而不是 TLS 的情況。


IBM Knowledge Center 連結引用了預主密鑰,該密鑰使用伺服器的公鑰加密,然後使用(連同客戶端和伺服器的隨機數)在 TLS 中派生實際的主密鑰。


在 OTP 方案中,共享密鑰通常以適當的長度隨機生成,然後進行編碼以便更好地處理。


使用常見的 RSA 連接,伺服器實際上不會查看預主密鑰,而只會獲取您提供給他的內容。很多時候,他並不關心它實際上是什麼。


OTPauth 字元串是使用伺服器的密鑰加密的這一事實可能意味著作為一種安全措施來強制訪問伺服器的私鑰以便能夠發出/驗證 OTP。或者,確實可能如建議的那樣嘗試讓客戶端選擇共享的 OTP 秘密,以便在部分洩露秘密的情況下,並非所有客戶端都被搞砸了。


秘密之前的數字應該對使用參數進行編碼和/或為秘密命名以供進一步處理。

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