具有擴充套件主金鑰時SSL TLS的主金鑰計算

2022-03-20 04:57:54 字數 1858 閱讀 7449

具有擴充套件主金鑰時ssl/tls的主金鑰計算

夢之痕bhl 2020-02-19 17:12:28 

簡介最近在基於openssl1.0.2t原始碼做開發,解密tls1.2資料報,出現部分資料報解密失敗的問題,通過定位發現,不同的https伺服器,在客戶端與服務端協商時部分擴充套件欄位有差異,導致計算金鑰失敗或錯誤,其中關於「extended master secret extension」,如果協商時具有此擴充套件字段,計算主金鑰的方式會有所差異,具體對此欄位的解釋,詳見rfc7627

tls金鑰計算流程

無「extended master secret」

在tls中,每個會話都有乙個「master_secret」,其計算方式如下:

master_secret = prf(pre_master_secret,「主密碼」,

clienthello.random + serverhello.random)

[0..47];12

3其中「pre_master_secret」是某些金鑰交換的結果協議。例如,當握手使用rsa密碼套件時,該值是由客戶端均勻隨機生成的。

具有「extended master secret」

全面協商擴充套件主金鑰後,握手時,「master_secret」的計算公式為:

master_secret = prf(pre_master_secret,「擴充套件的主金鑰」,

session_hash)

[0..47];12

3其中的session_hash的定義如下:

session_hash = 雜湊(handshake_messages)

1其中「handshake_messages」是指所有已傳送的握手訊息,或者從clienthello開始,直至幷包clientkeyexchange訊息,包括以下內容的型別和長度字段握手訊息。

三重握手

三重握手(triple handshake) (cve-2014-1295):攻擊者(a)分別與客戶端(c)和伺服器(s)握手,協商出同乙個主金鑰;之後令客戶端(c)和伺服器(s)之間重新協商(renegotiation)或繼續(resumption)會話來握手。可攻破重新協商,tls exporter rfc5705和"tls-unique" rfc5929。

具體握手過程

c:客戶端。 a: 攻擊者 s:服務端

c向a傳送「 clienthello」,a將其**給s。

s向a傳送「 serverhello」,a將其**給c。

s將包含其證書鏈的「證書」傳送給a。

a用自己的證書鏈替換它,並將其傳送給c。

s向a傳送「 serverhellodone」,a將其**給c。

c向a傳送「 clientkeyexchange」,其中包含

「 pre_master_secret」,已使用a的公鑰加密。解密

「 pre_master_secret」,使用s的公鑰對其重新加密,並且

將其傳送給s。

c向a傳送「完成」。a計算其「完成」

與s連線並將其傳送給s。

s向a傳送「完成」。a計算其「完成」

與c的連線,並將其傳送給c。

通過以上方式,如果使用無「extended master secret」擴充套件欄位的計算方式將發現,從c->a和從a->s之間使用的會話金鑰是一樣的,這種叫做未知金鑰共享(unkown key-share(uks))攻擊。當使用

master_secret = prf(pre_master_secret,「擴充套件的主金鑰」,

session_hash)

[0..47];12

3的計算方式時,因為有session_hash,計算了所有協商訊息的hash,如果中間攻擊者a對協商訊息進行改動,則客戶端和服務端計算的hash值則不一樣,最後計算出的主金鑰也會不同。

主主複製 主主複製時的主鍵衝突解決

大致思路 1 2臺伺服器都設定上二進位制日誌和relay日誌 2 都設定上replcation賬號 3 都設定對方為自己的master 主主複製下一定要注意避免的問題 同步衝突 例 create table stu id int primary key auto increment.2臺mysql地...

PufferBot 具有可擴充套件身體的飛行機械人

飛行機械人 科羅拉多大學博爾德分校的atlas研究所和卡爾加里大學的研究人員最近開發了一種可驅動的可擴充套件結構,該結構可用於製造可變形的空中機械人。在arxiv上預先發表的一篇 中,他們介紹了一種名為pufferbot的新型機械人,該機械人是使用這種獨特的創新結構建造的。進行這項研究的研究人員之一...

具有高擴充套件性的儲存引擎 TokuDB

tokudb是什麼?tokudb是乙個應用在mysql和mariadb中的儲存引擎,它使用索引來加快查詢速度,具有高擴充套件性並支援hot schema modification。如果你的記錄數量過億 儲存舊的記錄或想要縮小資料占用的儲存空間,很適合使用tokudb。本文內容摘自 核心系統 插入效能...