簡體   English   中英

具有密碼安全性的PFX自簽名x509證書

[英]PFX Self Signed x509 Certificate with password secure

在查看了如何通過在C#中創建自簽名證書生成自簽名數字簽名之后,我可以調用CreateSelfSignCertificatePfx並獲取字節數組中的PXF數據,然后可以在X509Certificate2對象中使用該數據進行簽名和驗證。 例...

byte[] pfx = Certificate.CreateSelfSignCertificatePfx("O=Company,CN=Firstname,SN=Lastname", DateTime.Now, DateTime.Now.AddYears(1), "password");

X509Certificate2 cert = new X509Certificate2(pfx, "password");
byte[] publicBytes = cert.RawData;

RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] signedData = rsa.SignData(new System.Text.UTF8Encoding().GetBytes("Test"), new SHA1CryptoServiceProvider());

RSACryptoServiceProvider rsa2 = (RSACryptoServiceProvider)new X509Certificate2(publicBytes).PublicKey.Key;

bool verified = rsa2.VerifyData(new System.Text.UTF8Encoding().GetBytes("Test"), new SHA1CryptoServiceProvider(), signedData);

這可行。 不過我擔心的是,原始字節byte [] pfx從上方需要存儲在DB中(以進行簽名)。 問題變成了,這種格式的字節有多安全? 我知道您需要密碼來構造帶有私鑰的新X509Certificate2,但是從一般意義上講,沒有密碼的字節有多安全? 我將這些字節作為附加層加密沒有問題,但這是必要的嗎?

根據X509Certificate2.X509Certificate2(Byte [],String)構造函數

使用正確的密碼調用此構造函數會解密私鑰並將其保存到密鑰容器中。

我只想確保沒有密碼的私鑰是安全的。

在我看來,問題不在於是否應將“字節”放入數據庫中,還可以將帶有私鑰的文件放入文件系統中。

就您做的方式而言,本質上是相同的。 您只是存儲組成cert文件的字節。

我可能無法理解這里的區別,但是字節和文件本質上是同一件事,唯一的區別是必須獲得對db的訪問權限才能獲得它們。

PFX(PKCS#12)中的私鑰已加密存儲,這當然是密碼的用途。 並非所有PFX都經過加密,結構片段保持純文本格式,以包含有關內容的元數據(例如使用哪種加密算法)。

基於檢查文件,從Windows 7開始,私鑰使用3鍵(168位)3DES加密。 密鑰是通過涉及密碼的復雜公式得出的; 文件中沒有保存任何內容,它沒有任何跡象表明您的密碼是多少,密碼有多久等等。

通常,通過在內容上添加MAC來證明該密碼是正確的,該MAC將相同的密碼用於其密鑰派生功能。 在MAC密碼和加密密碼可能不同的情況下(我個人從未見過),密碼將通過加密有效負載中的結構信息進行驗證。

DES的弱點主要在於較小的密鑰大小,今天很容易被強行強制使用。 3鍵3DES密鑰比(1)DES密鑰具有更多的語義位,使其破解花費2 ^ 112(〜5 x 10 ^ 33)倍的時間。

因此,歸根結底,私鑰是加密的。 但是,就像任何使用基於密碼的輸入一樣,如果您使用容易猜到的錯誤密碼,則可能會被蠻力破解。

使用智能卡或令牌存儲您的私鑰。

更新:任何可以訪問計算機的人都可以訪問Pvt密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM