2012-01-09 62 views
4

我試圖使用公鑰加密簽名並稍後驗證一個文件。該文件是一個簡單的明文文件,其中包含用於創作的用戶信息。用於Linux的C公鑰實現

我嘗試了不同的網站公鑰密碼算法的C實現,但我還沒有找到任何東西。很多網站都指向使用證書(x.509等),但這超出了我的需要。我正在尋找一種方法來生成公鑰和私鑰,並使用相對熟知的算法來簽署和驗證文件。

任何指向純C實現的指針?重點在於我可以重用的代碼,而不是外部庫。主要的問題是,我不想爲了擁有一個非常基本的公鑰系統而必須鏈接完整的lib和它的依賴關係。

謝謝。

+0

感謝@frunsi固定錯字 – 2012-01-09 20:43:53

+0

因此,讓我們總結一下:你正在尋找一個公共域庫您可以在開源操作系統上的閉源應用程序中使用它? – Flavius 2012-01-09 20:53:47

+0

我並不真正關心這個項目的開源。添加GPLed源將使我不得不部分地發佈我正在編寫的代碼,並且我不能這樣做,因爲我沒有爲開源項目做這件事。爲什麼這很難回答? C中是否有一個公鑰算法(RSA,DSA,El Gamal,其他)實現,只包含該算法,並且不會帶來巨大的其他特性,並且不是一個可以檢查我可以檢查的億萬個依賴項的庫?如果你不認爲有這樣的話。謝謝。 – 2012-01-09 21:05:53

回答

10

OpenSSL是一個很好的包。您可以使用加密庫部分,它提供了基本的RSA實現。這可能符合你的要求。

Cryptlib是另一種選擇,可以爲你工作。雖然它有一些奇怪的許可問題,所以根據你將如何使用它來考慮這些問題。

Crypto++是一組不同的加密技術,包括RSA,所以你不妨試試。

最後,RSA是不是非常複雜的實現,所以你可以自己使用GMP,它提供了你所需要的必要的數學功能,甚至實現它。

+3

同意,OpenSSL是你想要的方式。 – wadesworld 2012-01-09 20:20:12

+2

我已經嘗試過了。 2個問題。 1)我不希望鏈接到完整的openssl庫,因此我可以擁有基本的公鑰功能,以及2)我不能強制程序運行的任何計算機必須安裝openssl。我處理的幾個盒子都沒有。這就是爲什麼我正在尋找我可以使用我自己的代碼的代碼。 – 2012-01-09 20:22:31

+0

@Mar Aleph:如果談到密碼學,最古老和最同行評審的代碼可能就是你想要的代碼,OpenSSL絕對是一個備受尊敬的圖書館。實際上,將它靜態鏈接到應用程序不應該花費太多的內存。 – 2012-01-09 20:51:28

5

你可能想看看備受推崇,調試和測試OpenSSL庫。儘管OpenSSL主要用於SSL/TLS網絡,但它包含許多密碼協議的非常好的實現,這些協議通常用於一般密碼學。

希望這會有所幫助!

+2

Downvoters-你能解釋這個答案有什麼問題(尤其是因爲另一個答案給出相同的鏈接/答案剛剛起牀?)我想如果可能的話改善這個答案。 – templatetypedef 2012-01-09 20:20:42

+0

我不知道誰低估了這個問題。這不是我。無論如何,感謝您的答案,但我不認爲OpenSSL是我需要的可行解決方案。看看我之前回答的是什麼。 – 2012-01-09 20:25:23

+0

這種情況太悲傷了,所以變得越來越成爲幫派的一個地方。每個人都帶來他的家人... – Flavius 2012-01-09 20:27:29

1

this question的答案包含一些有趣的鏈接到其他庫。

但是,我記得在C中存在一些RSA和私鑰加密的參考源代碼。我會盡快添加一個鏈接,因爲我發現它;-)

編輯

我剛剛發現「此鏈接」(http://www.hackchina.com/en/cont/93068 - 在你自己的風險開) - 不知道的源和細節的代碼。但是,過去,與原始RSA參考實現的鏈接包含在OpenSSL源文件或其文檔中的某處。這是基於cryptsoft.com的圖書館。我確信源碼仍然可以在www.rsa.com/rsalabs/的某個地方找到 - 但我找不到它,現在我的時間已經不多了。祝你好運;-)

+0

謝謝。再次,我試圖使用代碼簽署文件。我不需要帶來大量的代碼來使用僞隨機生成器,4種不同的分組密碼等。 – 2012-01-09 20:50:51

+0

僅供參考如果你去那個hackchina網站,它會嘗試安裝一個好的惡意軟件。謝謝。如果你沒有看到它,很可能是你現在感染了。 – 2012-01-09 21:14:30

+0

好吧,我會檢查我的電腦,然後我將刪除鏈接... – Frunsi 2012-01-09 22:01:27

2

DJ Bernstein的curve25519,您可以創建公鑰/私鑰對。它沒有用於簽名的功能,但是您應該能夠在不太麻煩的情況下確定該部分。

更新:同時,也有Ed25519已經有了簽名代的東西,沒有你必須跳過籃球。同一作者,相同的軟件可用性(例如「Donna」實現和python綁定),相同的易用性,可比的速度。

最初的實現以及「Donna」實現都是在非常寬鬆的許可下提供的。

您需要編譯一個文件並調用一個函數來生成一個密鑰對,並且它非常快。公鑰沒有模糊的要求。所有人都需要一些「廉價,快速,簡單的公鑰密碼」。