2010-12-03 92 views
1

我打算寫一些軟件使用公鑰/私鑰身份驗證SFTP上傳文件到服務器。我想知道人們如何推薦管理密鑰(尤其是私鑰)。SFTP與非文件的密鑰

我的目標平臺是使用C#或C++的Windows。我已經看了許多庫:

C#
(自由/開放)
SharpSSH
Granados

(商業)
Rebex

C++
libcurl/OpenSSH

所有這些似乎要求將私鑰存儲在文件系統上,我寧願避免出於安全原因。我也不希望自己實現身份驗證,儘管我認識到這是一個選項。我的問題:

有沒有辦法直接從內存中提供這些庫(或任何庫/ API,我可能忽略)的關鍵值,而不是從文件加載?

如果不是,建議如何管理這些密鑰文件?除了密碼加密和嚴格的訪問控制之外,還有其他一些事情應該如何保護密鑰文件?

回答

0

我從來沒有用過格拉納多斯,但該庫的SSH2UserAuthKey class具有從任意Stream加載用戶的認證密鑰(這可能是一個MemoryStream,如果你想直接從內存中加載密鑰)對FromSECSHStyleStream方法。看起來這會讓你繞過關鍵存儲的文件系統。

Rebex.Net有一個SshPrivateKey class constructor可以從byte[]加載;這也應該讓你避開文件系統。

雖然我沒有檢查其他圖書館,它很可能是所有的人都將提供方法來加載從byte[]MemoryStream,或unsigned char*的關鍵,直接從文件加載方便的方法。但是,這些API並不能解決私鑰如何存儲的問題。您可以使用密碼保護它(這似乎是使用SSH私鑰的一種常見方法),或者使用ProtectedData class以當前Windows用戶的憑據對其進行加密。

0

SFTP classes SecureBlackbox(我們的產品)可讓您從任何流或字節數組中加載密鑰。此外,他們還允許您以各種格式生成和轉換SSH密鑰。

如果你有問題,我們通過Forum以評估用戶提供支持和HelpDesk

3

所有這些似乎需要 私有密鑰被存儲在 文件系統,我寧願 避免出於安全原因。

我想你應該擁抱的文件系統。現代的NTFS(作爲Windows開發人員幾乎可以肯定使用)具有強大的安全機制,這些機制可能比您(或我)可能設計的大多數替代機制更好地思考。 NTFS有訪問控制列表,加密等 - 如果你不能相信你的文件系統來保證你的數據安全,你爲什麼還要麻煩關心網絡流量?

我會注意,有可能妨礙做什麼我上面說的一些具體情況,但我沒有看到在原崗位的任何人提及。

+0

謝謝你,約翰。我不能爲此爭辯太多。我提出這個問題是因爲我被迫要找到一種解決方案來保護這一點,即使是在機器上具有管理權限的不良演員。 – 2010-12-16 19:52:53

0

下面的代碼演示瞭如何使用使用Rebex SFTP私鑰進行身份驗證。

代碼會從以下forum post拍攝。欲瞭解更多信息,請查詢SFTP tutorial

​​