ssh 加密之前的過程

2021-09-12 04:11:07 字數 1884 閱讀 3318

當tcp連線建立後,雙方都要傳送identification string,格式為:

ssh-protoversion-softwareversion sp comments cr lf

在傳送完identification string之後,會進行 key exchange。

相容性:

在ssh2.0之前的版本沒有正式的文件。

old client, new server:

服務端應該有乙個相容選項的配置項,如果配置了,那麼服務端傳送的protoversion是1.99。對支援ssh2.0的客戶端來說,1.99應該等於2.0。

new client, old server:

了解到服務端版本比較老之後,客戶端應該重新建立連線,使用低版本資訊。

binary packet:

uint32    packet_length

byte       padding_length

byte[n1]  payload; n1 = packet_length - padding_length - 1

byte[n2]  random padding; n2 = padding_length

byte[m]   mac (message authentication code - mac); m = mac_length

mac = mac(key, sequence_number || unencrypted_packet)

sequence_number不傳輸,第乙個包為0,以後每收到乙個包,遞增1。

各種金鑰協商的過程:

client: 傳送identity string,傳送kex_init包,其中包含cookie和支援的各種演算法。

server: 收到identiy string,傳送kex_init包,其中包含cookie和支援的各種演算法。

至此,雙方知道所使用的演算法。

使用serverversion, clientversion, 兩個kex_init包,初始化kex。

client: 傳送kexdh_init或kex_dh_gex_request。

server: 傳送kexdh_reply或kex_dh_gex_group,將dh的p和g傳送給客戶端。

client: 傳送dh_gex_init,其中包含客戶端的dh公鑰。

server: 傳送dh_gex_reply,其中包含公鑰(hostkey),自己的dh公鑰,以及簽名演算法和已知資訊的簽名。

金鑰的計算:

client: 客戶端傳送newkeys訊息。

server: 

已知資訊有:

v_c: 客戶端的初始報文(包含版本資訊的報文)。

v_s: 服務端的初始報文。

i_c:客戶端的ssh_msg_kex_init的有效負荷。

i_s: 服務端的ssh_msg_kex_init的有效負荷。

e: 客戶端dh公鑰。

f: 服務端dh公鑰。

k: dh計算的結果。

h=hash(v_c||v_s||i_c||i_s||k_s||e||f||k);

會話第一次秘鑰交換生成的h才是session_id。

金鑰計算公式:hash(k, h, 單個字元,session_id)

其中單個字元可以是如下幾個字元:

'a': 用於計算客戶端到服務端的iv。

'b': 用於計算服務端到客戶端的iv。

'c': 用於計算客戶端到服務端的加密秘鑰。

'd': 用於計算服務端到客戶端的加密秘鑰。

'e': 用於計算客戶端到服務端的hmac秘鑰。

'f': 用於計算服務端到客戶端的hmac秘鑰。

計算的結果記為re,如果想要的秘鑰長度比re長,re=re+hash(k, h, re)。如果還不夠,繼續計算新增。

SSH的加密配置

客戶端192.168.200.129 伺服器192.168.200.128 1伺服器 首先在伺服器關閉防火牆 臨時 iptables l 檢視防火牆 iptables f 臨時關閉防火牆 iptables l 檢視防火牆 永久關閉 getenforce chkconfig list iptables...

ssh加密的小了解

首先http和ssh都是作為登陸github倉庫使用的,http因為在push的時候沒有遠端倉庫許可權,需要輸入賬戶和密碼,就很麻煩。ssh不一樣,通過本地生成的公鑰放入github中,可以實現免密登陸,這樣就不要在push時輸入密碼什麼的。對稱加密,加密和解密使用一套金鑰 非對稱加密,加密和解密使...

加密教程 加密教程四之字首加密報表的生成

前面兩節我們介紹了凱撒加密和 多位元組加密 在這節我們介紹乙個新的加密方式,我把它稱為字首加密 舉個例子,比如說我用keys這個自定義的字串去對abcdefghijklmnopqrstuvwxyz這個字串加密,得到結果將會是 keysabcdfghijlmnopqrtuvwxz 所以密碼對應表為 a...