我想在C#中實現以下內容:私鑰加密公鑰加密
我想要一個內部存放公鑰加密例程的Generator。它可以提供一個字節數組(通常由下面描述的客戶端)並用其私鑰對其進行加密。
客戶端擁有與發生器共享的公鑰。它從發生器獲取結果並使用公鑰對其解密。它將最初提供給發生器的字節數組與比較結果以查看它們是否對齊。這個想法是,如果它們匹配,就能夠在某種程度上確認生成加密字節的人擁有私鑰。它也能夠驗證特定的加密值是否與它提供的數據相對應。
我看到的大多數內置C#公鑰加密庫都希望將私鑰與解密關聯起來(如RSACryptoServiceProvider)。我明白了爲什麼,因爲很多場景都涉及保護進程的解密端而不是加密。是否有任何C#庫可以直接保護加密過程?我已經嘗試過整天早上看充氣城堡,但我很難讓它適用於基本場景。該文件留下了一些東西...
再次,我的主要目標是確保無論產生的加密擁有私鑰。客戶也必須確保發電機的結果與其提供的信息相符。如果有我失蹤,可能更好地符合可用的庫替代辦法,我所有的耳朵:)
所以你想要發生器產生一個簽名? – Filip
這已經「選擇了明文攻擊」寫在它上面。公鑰密碼系統依賴於私鑰的擁有者,該私鑰是生成用該密鑰簽名的消息的實體。如果您希望生成器能夠證明它擁有與給定公鑰相關聯的私鑰,那麼讓生成器生成一個由可以散列的隨機位組成的文檔,然後發佈散列,signed-with-private密鑰哈希和文檔。任何擁有公鑰的人都可以驗證散列,簽名散列和文檔匹配。 –
如果你絕對必須讓客戶端 - 記住*應該由生成者假設爲攻擊者* - 提供文檔然後至少讓生成器*將隨機位附加到文檔*,然後*散列新文檔*,然後*加密散列*。同樣,生成器可以發佈修改過的文檔,散列和簽名散列,並且客戶端可以驗證它們全都匹配。但只有在絕對必要時才這樣做。您永遠不想爲攻擊者*加密文檔*。 –