文章分享

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

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

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

摘錄:HCTech 無(wú)錫和控電子   時(shí)間:2020-08-07   訪問(wèn)量:3934

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



PSK的目的

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


PSK的江湖地位

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

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

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

PSK的三種類型

PSK-only

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

我們知道,其他的非PSK算法,client key exchange解出來(lái)的48字節(jié)的值,就是pms,但是PSK時(shí),不一樣,假設(shè)我們?cè)O(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如下: 
這里寫圖片描述

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

PSK-RSA

這個(gè)我個(gè)人覺(jué)得比較累贅,RFC上說(shuō)了他的用處,大家可以看看,我沒(méi)啥耐心。

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)的就多了一個(gè)identity域,其他的比如Encrypted premaster就和標(biāo)準(zhǔn)的算法一樣。 
對(duì)于標(biāo)準(zhǔn)的RSA,Encrypted premaster包含了48字節(jié)(去掉padding后)的random,用作pre master key,顯然PSK之所以叫做PSK,我們肯定不能簡(jiǎn)簡(jiǎn)單單的和標(biāo)準(zhǔn)RSA一樣,把Encrypted premaster解開(kāi),提取出的值就是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).

舉個(gè)例子,Encrypted premaster我們解密開(kāi)是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

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

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


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

下一篇:TLS 1.3概述

在線咨詢

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

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

在線咨詢

免費(fèi)通話

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

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

免費(fèi)通話

微信掃一掃

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