用於 DROWN 攻擊的 Blechenbacher 攻擊的符合 TLS 的密文和符合 SSLv2 的密文
這是關於 DROWN 攻擊的已發表論文(https://drownattack.com/drown-attack-original-report.pdf)
論文中提到,對於 TLS,RSA PKCS#1 v1.5 用於封裝握手期間交換的 48 字節的 premaster secret。是否意味著隨機填充字元串 PS 被附加到此格式化消息的 48 字節預主密鑰
([00] || [02] || PS || [00] || pms)
在實際的 RSA 加密完成之前?
如果是,我有 2 個問題
(第一個問題) SSLv2 伺服器中的解密預言如何區分符合 TLS 的密文和符合 SSLv2 的密文,因為填充的 TLS 明文也包含
([00]||[02])
第一個 2 個字節?**(第二個問題)**為什麼必須將符合 RSA PKCS#1 v1.5 TLS 的密文轉換為符合 RSA PKCS#1 v1.5 SSLv2 的密文,然後才能輸入到 Blechenbacher 預言機?
提前致謝!
**(背景)**在論文中提到,對於 TLS,RSA PKCS#1 v1.5 用於封裝握手期間交換的 48 字節的 premaster secret。是否意味著隨機填充字元串 PS 被附加到此格式化消息的 48 字節預主密鑰
(
$$ 00 $$||$$ 02 $$|| PS ||$$ 00 $$|| pms)
在實際的 RSA 加密完成之前?
是的,修正 PS 是 random nonzero。(我對此很敏感,因為我曾經不得不與一個沒有從 PKCS1-type2 填充中正確排除零的系統進行互操作測試,導致百分之幾的密碼導致虛假測試失敗。)
(第一個問題) SSLv2伺服器中的解密oracle如何區分符合TLS的密文和符合SSLv2的密文,因為填充的TLS明文還包含(
$$ 00 $$||$$ 02 $$) 作為第一個 2 個字節?
如 2.2 中所述,對於 SSLv2,PKCS1 加密的值為 $ mk_{secret} $ 其大小取決於所選的密碼套件。
如 3.2 中所述,SSLv2 oracle(伺服器)檢查“ $ m $ 開頭
0x00 02
後跟非空填充字節、分隔符字節0x00
和master_key
$ mk_{secret} $ 正確的字節長度 $ k $ " 其中 k 取決於密碼套件;給出的範例是 5 到 24。48 不等於所選 SSLv2 密碼套件的 k 值,或者實際上不等於其中任何一個。
3.3 確認了這一點:“但由於沒有 SSLv2 密碼套件具有 48 字節的密鑰強度,這意味著有效的 TLS 密文對我們的 oracle O 無效。” 3.3 的其餘部分解釋了用於查找數學相關且符合 SSLv2 的密文的(聰明的)過程。
**(第二個問題)**為什麼必須將符合 RSA PKCS#1 v1.5 TLS 的密文轉換為符合 RSA PKCS#1 v1.5 SSLv2 的密文,然後才能輸入到 Blechenbacher 預言機?
因為 SSLv2 oracle 只對符合 SSLv2 的密文給出可區分的響應。對於所有TLS 有效的密文,它會給出一個隨機響應,無法從中提取任何資訊——但預言機的全部目的是洩露資訊。