文章分享

開放、平等、協(xié)作、快速、分享

當(dāng)前位置:首頁>文章分享

PSK在TLS中的應(yīng)用

摘錄:HCTech 無錫和控電子   時間:2020-08-07   訪問量:3461

PSK在TLS中的應(yīng)用



PSK的目的

??我們都知道TLS需要依賴非對稱算法(RSK,EC,DS,DH...)完成秘鑰交換,身份認(rèn)證的功能,但是非對稱算法的耗時和耗計(jì)算資源的特性在對資源或者耗時敏感的場景下,你就想把他優(yōu)化掉。本文我們就簡紹一種TLS標(biāo)準(zhǔn)本身提供的優(yōu)化方式:PSK.


PSK的江湖地位

??PSK的方式應(yīng)該是最古老的一種秘鑰交換和認(rèn)證方式,但是它在TLS中的江湖地位是比較低的,從最早的非正式的優(yōu)化方案到有了自己的RFC編號RFC4279(December 2005)對比TLS的歷史

之前搞TLS的過程中,PSK的概念有所了解,但是一直覺得他沒什么用處,就大致看了一下實(shí)現(xiàn),沒深究。但是TLS1.3中居然設(shè)計(jì)到了PSK的概念,我想有必要在這里總結(jié)一下,以免忘記。(其實(shí)就我個人而言,要理解TLS 1.3的session resume原理,是不需要理解PSK的,anyway,就當(dāng)記錄了)

RFC 4279中詳細(xì)描述了各個方面。

PSK的三種類型

PSK-only

簡單的說,就是client寫死一個key,server寫死一個key,當(dāng)然這兩個key是一樣的。 
這個key被用來當(dāng)做pms(pre master key)的一部分。當(dāng)然,client 和 server也可以配置多個key,為了決定使用哪個key,每個key對應(yīng)一個psk identity(字符串標(biāo)識)。 
客戶端會發(fā)送client key exchange,client key exchange中攜帶有一個字符串:identity,server收到identity,查找identity對應(yīng)的key,這樣就能知道客戶端使用的是那個key了。

我們知道,其他的非PSK算法,client key exchange解出來的48字節(jié)的值,就是pms,但是PSK時,不一樣,假設(shè)我們設(shè)置的key是”0x12345678”,4字節(jié),那么我們的pms是: 
00 04 00 00 00 00 00 04 12 34 56 78,一共12字節(jié)。

RFC上這么描述premaster 的生成:

The premaster secret is formed as follows: if the PSK is N octets   long, concatenate a uint16 with the value N, N zero octets, a second
   uint16 with the value N, and the PSK itself.
struct {
             opaque other_secret<0..2^16-1>;
             opaque psk<0..2^16-1>;
         };

      Here "other_secret" either is zeroes (plain PSK case) or comes      from the Diffie-Hellman or RSA exchange (DHE_PSK and RSA_PSK,
      respectively).

這里,我們的other_secret填寫的是0。之后的流程,就如其他算法一樣,這里不再描述。

報(bào)文如下: 
這里寫圖片描述

其中: 
client key exchange如下: 
這里寫圖片描述

正如上面所說,client key exchange攜帶的是identity,其實(shí)就是key對應(yīng)的標(biāo)識。服務(wù)器肯定也有該標(biāo)識對應(yīng)的key,這樣才能協(xié)商成功。

PSK-RSA

這個我個人覺得比較累贅,RFC上說了他的用處,大家可以看看,我沒啥耐心。

PSK-only中,key是兩端配置寫死的,那么在PSK-RSA中呢,key也需要配置。

先看報(bào)文: 
這里寫圖片描述 
報(bào)文的流程,和標(biāo)準(zhǔn)的RSA流程一模一樣。 
我們細(xì)看client key exchange報(bào)文: 
這里寫圖片描述 
它和標(biāo)準(zhǔn)的就多了一個identity域,其他的比如Encrypted premaster就和標(biāo)準(zhǔn)的算法一樣。 
對于標(biāo)準(zhǔn)的RSA,Encrypted premaster包含了48字節(jié)(去掉padding后)的random,用作pre master key,顯然PSK之所以叫做PSK,我們肯定不能簡簡單單的和標(biāo)準(zhǔn)RSA一樣,把Encrypted premaster解開,提取出的值就是pre master key。

PSK-RSA中的pre master key 其實(shí)定義和PSK-only中的一樣

struct {
             opaque other_secret<0..2^16-1>;
             opaque psk<0..2^16-1>;
         };

      Here "other_secret" either is zeroes (plain PSK case) or comes      from the Diffie-Hellman or RSA exchange (DHE_PSK and RSA_PSK,
      respectively).

舉個例子,Encrypted premaster我們解密開是a-xA-X,48字節(jié),那么我們的pre master key 就是 
00 30 a-xA-X 00 04 12 34 56 78 ,共56字節(jié)。 
剩余的流程,和其他標(biāo)準(zhǔn)算法一樣。

PSK-DHE、PSK-ECDHE

這個就不多說了,握手流程和標(biāo)準(zhǔn)的DHE和ECDHE一樣,只是client key exchange和server key exchange不一樣罷了。 
注:server key exchange 有個”PSK identity hint”這里沒細(xì)究。

通過標(biāo)準(zhǔn)的握手,從pubkey中提取出標(biāo)準(zhǔn)的pre msater key,然后添加我們設(shè)置的key,就如PSK-RSA一樣就行了。


上一篇:TLS協(xié)議、PKI、CA

下一篇:TLS 1.3概述

在線咨詢

點(diǎn)擊這里給我發(fā)消息 售前咨詢專員

點(diǎn)擊這里給我發(fā)消息 售后服務(wù)專員

在線咨詢

免費(fèi)通話

24小時免費(fèi)咨詢

請輸入您的聯(lián)系電話,座機(jī)請加區(qū)號

免費(fèi)通話

微信掃一掃

微信聯(lián)系
返回頂部