2013-04-16 78 views
0

請首先閱讀這個問題,因爲標題不是很清楚,我無法用幾句話來提出我的問題。創建和簽署公鑰/私鑰對編程

我的場景是這樣的: 我正在創建一個P2P應用程序。對等方在安裝過程中生成公鑰和私鑰對,並將公鑰上傳到我的中央服務器。當對等體A想要與對等體B通信時,它下載B的公共密鑰並進行正常的加密和數據傳輸。

我需要一點點頭以編程方式創建這個公鑰/私鑰對。我再次需要通過中央服務器的私鑰簽署對等公鑰,以便了解其真實性。

我是否需要創建一個私人的CA類或其他方式?如果有人能夠從編程的角度幫助我理解這種創建,簽署等,那就太好了。我在谷歌搜索中獲得了很多概念,但在編碼方面卻不多。我是密碼學的新手,所以實現它的任何其他想法都會有所幫助。

注意:我不能使用任何第三方CA.我不使用證書進行身份驗證,而是使用加密。

謝謝。

回答

0

經典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可以接收不適合他的數據(他不能解密,但他可以假裝成另一個同伴......)

+0

非常感謝。我正在考慮類似於這個實現的東西,但我也有其他的實現,並沒有能夠找出哪一個去。我認爲的另一種方法是讓服務器在註冊過程中創建密鑰對和證書,並簽署證書並將其發回給對等方。但我想我會去執行這個實現。而且我沒有像真正的CA那樣創建一個CA,但是我將擁有一箇中央服務器的自簽名證書和密鑰對。並用它來簽署所有的對等證書。 –

+0

您能否告訴我任何安全隱患:不使用已建立的CA軟件並自己執行此類任務。簽名部分看起來非常簡單,我沒有看到有任何CA軟件的意義。 –

+0

好...什麼是CA軟件? ...如果你看看openssl,它包含一個「小CA」......圍繞openssl的基本操作的一堆腳本......你正在構建的是一個CA ......事實上......您的CA將擁有自簽名證書...好吧...查看其他CA ...瀏覽器中的所有根CA都有自簽名證書......唯一的區別是:這些證書隨瀏覽器或您的操作系統一起提供...你的應用將與你的應用一起交付......這個CA將和其他任何... – DarkSquirrel42

1

你在概念上得到很多點擊的原因,但不是編程的原因是它很難拿出一個好的協議,而不是難以實際編程它。這也是正確的順序,這種協議你不能隨後編程和記錄。

如果您想使用證書/專用密鑰進行簽名或加密,那並不重要。關鍵是公鑰需要被信任。如果您不能相信公鑰,那麼您無法保證加密是針對正確的實體執行的。這意味着例如對等體A使用M的公鑰而不是B進行加密。這幾乎總是一個問題,除非你只對竊聽攻擊感興趣。

由於您似乎有一箇中央服務器,使用層次信任模型似乎是合乎邏輯的。對於這樣的系統,使用X509證書和中央CA的PKI是最有意義的。您可以使用基於OpenSSL的CA系統或任何其他免費的CA解決方案,如EJBCA或某些基於Windows服務器的解決方案。

當你有CA運行你還沒有。您需要一種方法讓對等方信任CA的根證書。之後,您需要一種方法讓CA信任由對等方發送的證書請求。沒有更多的信息,很難說哪種方法最適合你。

你應該只關心編程時,你已經知道了所有這些(至少)。

+0

這是很多免費的建議,應該向你收費:) –

+0

你能指點我任何有關X509和實現的良好教程? –