經典PKI的情況......你想要一個CA ...
所有您同行需要提前瞭解的公共CA證書......
一次與服務器的同行寄存器,它應該加密自己的密鑰,以便服務器可以確保接收到的密鑰沒有被篡改...
的數據結構,你應該使用X509
但從程序員點:
對A想用新的密鑰對註冊...
- >生成密鑰對
- >填寫證書的識別細節,並附上公鑰 (你現在通常稱爲「證書請求」)
- > enc對稱地發送請求(具有隨機IV的AES-CBC-256看起來像是一個不錯的選擇)
->對symertic密鑰進行加密,並將加密的請求和明文IV連同加密的請求和明文IV發送到服務器(可選地包括服務器提供隨機數或在加密部分addidional會話數據)
在服務器側:
解密,檢查數據,尤其是請求 的識別信息,如果這是確定,取請求(ID部分+公共密鑰)並用CA密鑰
報告回對等體A並且移交簽名證書因斯它不包含任何祕密,這可能是明文或與同行一所提供的密鑰)
,一旦你需要讓同行之間的接觸,你只需要一些聯繫人信息加密:
如果同行X想要聯繫同伴A,所有您必須分發的地址是如何聯繫A的地址......然後,X聯繫A並要求提供ID(「您好?這是A嗎?請給我你的證書,這裏是我的證書。「)...證書交換後,驗證簽名......如果CA sig確定,雙方都會生成隨機數(」nonces「;數字一旦使用)並用接收和驗證的證書中的公鑰對它們進行加密,並將它們交給另一個對等體......在接收到加密值時解密,並用其他方密鑰重新加密,並且在接收到解密後該值與您自己的私人密鑰,並驗證它是相同的號碼您發送...已驗證的連接已建立,您現在可以繼續交接對稱密鑰,並開始傳輸加密數據
如果您認爲您可以在沒有身份驗證的情況下生活另一個節點,你可以直接開始傳輸加密數據後,你檢查他們的證書上的CA信號......但考慮到在這種情況下,一個attac ker可以接收不適合他的數據(他不能解密,但他可以假裝成另一個同伴......)
非常感謝。我正在考慮類似於這個實現的東西,但我也有其他的實現,並沒有能夠找出哪一個去。我認爲的另一種方法是讓服務器在註冊過程中創建密鑰對和證書,並簽署證書並將其發回給對等方。但我想我會去執行這個實現。而且我沒有像真正的CA那樣創建一個CA,但是我將擁有一箇中央服務器的自簽名證書和密鑰對。並用它來簽署所有的對等證書。 –
您能否告訴我任何安全隱患:不使用已建立的CA軟件並自己執行此類任務。簽名部分看起來非常簡單,我沒有看到有任何CA軟件的意義。 –
好...什麼是CA軟件? ...如果你看看openssl,它包含一個「小CA」......圍繞openssl的基本操作的一堆腳本......你正在構建的是一個CA ......事實上......您的CA將擁有自簽名證書...好吧...查看其他CA ...瀏覽器中的所有根CA都有自簽名證書......唯一的區別是:這些證書隨瀏覽器或您的操作系統一起提供...你的應用將與你的應用一起交付......這個CA將和其他任何... – DarkSquirrel42