openssl rsa 產生key的過程 - Linux

Noah avatar
By Noah
at 2018-07-19T02:12

Table of Contents



借標題回一下,有錯鞭小力點

首先名詞先確定一下

對稱式加密:密鑰系統、私鑰系統,這邊的key有時候被翻譯成私鑰(secret key)
非對稱式加密:公鑰系統,key有兩把,公鑰和私鑰(public key和private key)

「私鑰」雖然中文一樣,但是原文英文意思完全不同
=========================================
RSA可以用在兩個地方,非對稱式加密和數位簽章(ckc1ark大大講的:私鑰簽章 公鑰驗證)

那麼來講一下最常聽到這些演算法應用的地方:SSL/TLS
SSL/TLS常常被誤會成它就是公鑰系統,實際上它包含了:密鑰系統、公鑰系統、雜湊、亂數產生、HMAC...等

SSL/TLS過程大概是兩個階段
1. client和server交換加解密資訊
2. 密文傳輸

第二個階段的密文傳輸是怎麼加密的,是低,就是用「對稱式加密」
那麼這時候對稱式加密的key(secret key)什麼時候傳遞的?
就是第一階段的交換加解密資訊時候傳遞的

第一階段交換的加解密資訊實際上是交換非對稱式加密的公鑰(和其他東西)
再用這個非對稱加密的公鑰來加密之後要用的對稱式加密secret key

所以這樣就能解決非對稱加密速度太慢的問題(filiaslayers大大提到的)

=========================================
那再繼續往下講,「如何交換或協商對稱式加密的secret key(第一階段)」
現代SSL/TLS連線資訊通常會寫這樣:
1. ECDHE-ECDSA
2. ECDHE-RSA
3. RSA-RSA

前面代表交換對稱式加密key的方法,後面代表憑證的數位簽章演算法

RSA因為速度很慢,加上key要夠大(2048 bits以上)安全性才夠,所以有個演算法來了

DH(Diffie-Hellman)是一種演算法可以兩方自己決定secret key(在SSL/TLS叫做session key)
但是它需要的一些參數並不會每次不同,所以再加上E(Ephemeral),它就會每次產生不同的參數已達到Perfect Forward Secrecy(PFS)
然後再加上Elliptic Curve(EC),就能達到不用很長的key就能達到一定的安全性
EC的key 224 bits相當於RSA的2048 bits
(Source: NIST 800-57, Table 2)

所以
ECDHE-ECDSA:ECDHE來決定secret key,ECDSA來做數位簽章
ECDHE-RSA:ECDHE來決定secret key,RSA做數位簽章
RSA-RSA:RSA來交換secret key(key的來源是憑證的private key),RSA做數位簽章
按照這個關係,所以並不會有RSA-ECDSA,因為用RSA來交換secret key,但是憑證內沒有private key給它用

=========================================
補充一下:因為ECDHE能達到PFS的關係,所以即使破解了這條session的key
但是無法拿來破解其他同一個server的session,所以有些的passive SSL decryption會失敗就是這個原因
passive SSL decryption是把SSL封包錄下來,然後用server的私鑰(RSA)來解密
但是假設產生secret key牽涉到ECDHE就一定無法解,(除非利用NSS Key Log來記錄client的資訊)

--
Tags: Linux

All Comments

Dora avatar
By Dora
at 2018-07-21T19:21
Quintina avatar
By Quintina
at 2018-07-23T22:20

openssl rsa 產生key的過程

Franklin avatar
By Franklin
at 2018-07-18T22:42
→ bdvstg: 有看到說 一般只會用RSA去交換對稱金鑰 07/18 20:03 → bdvstg: 傳輸還是用對稱加密 原因說是耗資源... 07/18 20:04 懶著推文了,直接回你這個好了,雖然已經跟linux無關了... 傳輸一定不會用你一開始有的公、私鑰來傳啊 這不只是耗資源的問題,而是安 ...

ubuntu系統 找不到安裝好的nvidia driver

Hazel avatar
By Hazel
at 2018-07-18T15:09
各位前輩大家好 我跟幾位朋友 要用putty連上一台 ubuntu 16.04 系統的主機 用他的運算能力來學習使用tensorflow 我們使用的顯示卡為 nvidia 1050 我們現在安裝好driver後 去detail看gpu的地方 發現還是使用內顯 後來經過努力 弄了很久以後 輸入nvidia - ...

openssl rsa 產生key的過程

Olga avatar
By Olga
at 2018-07-18T10:53
懶著用推文,直接回 跟據RSA的原理,他是用非對稱式的金鑰在做加解密 假設做出來的金鑰是A跟B,兩邊是不能互推的 也就是說只有A你得不到B,反之亦然 但是,私鑰跟公鑰不等於A跟B的關系 私鑰比較像是A+B,而公鑰只有A或B 我不知道為什麼你會覺得流程應該要有public key 因為A、B是等價的,沒有所謂 ...

mint 19 幾個問題

Kyle avatar
By Kyle
at 2018-07-18T10:20
我幫我朋友問的 他手只能左手小指按鍵盤 1.如何用touch pad模擬滑鼠滾輪 瀏覽chrome 2.所有視窗的放大,縮小,關閉 小icon 及 上下滑動bar 如何放大 atmint 19 xface Dell inspiron n4110 ----- Sent from JPTT on ...

openssl rsa 產生key的過程

Doris avatar
By Doris
at 2018-07-18T10:17
大家好 我對openssl 產生RSA public key / private key 的過程有些疑惑 來這邊請教大家 我看網路上的文件 (有關openssl 產生 RSA key的) 都是先產生private key (解密用私鑰) 再使用這個private key去產生public key ...