Encryption

使用非對稱密鑰對加密內容作為簽名的一種形式

  • July 9, 2022

案例如下:

有簽名者,叫它小號一個 $ S_A $ 有索賠或文件Dj $ D_j $ . 小號一個 $ S_A $ 想要任何客戶Cķ,∀ķ $ C_k, \forall k $ 能夠驗證它沒有被篡改。

我想這樣做的一種方法是使用非對稱加密小號一個 $ S_A $ 加密Dj $ D_j $ 作為:和j=和nCr是p噸(Dj,ķpr一世在) $ E_j = encrypt(D_j, K_{priv}) $ 使用私鑰ķpr一世在 $ K_{priv} $ .

然後任何可以訪問的客戶ķp在b $ K_{pub} $ 可以解密和j $ E_j $ 作為Dj=d和Cr是p噸(和j,ķp在b) $ D_j = decrypt(E_j, K_{pub}) $ 確保沒有人篡改索賠。

小號一個 $ S_A $ 不希望被迫為使用連接的每個客戶端加密聲明Cķ $ C_k $ 的公鑰。只需將預加密的聲明連同公鑰一起發送給任何希望觀看它的客戶就足夠了ķp在b $ K_{pub} $ . 然後是希望驗證索賠的客戶Dj $ D_j $ 可以這樣做。

ķpr一世在 $ K_{priv} $ 和ķp在b $ K_{pub} $ 僅用於簽署聲明而不用於加密通信。

我的問題是:對於這個案例,這是一個有效的解決方案嗎?如果不是,那麼處理此問題的正確方法是什麼?

您的加密和解密功能並不是真正的標準。通常,公鑰用於加密(但您使用的是私鑰),私鑰用於解密。在這種情況下,您可以簡單地使用數字簽名https://en.m.wikipedia.org/wiki/Digital_signature

在數字簽名方案中,您有三種算法(ķ和是G和n,小號一世Gn,在和r一世F是) $ (KeyGen, Sign, Verify) $ .ķ和是G和n $ KeyGen $ 給你一個驗證密鑰在ķ $ vk $ 和一個簽名密鑰sķ $ sk $ .小號一世Gn(sķ,Dj)→sj $ Sign(sk, D_j) \to s_j $ 給你一個簽名sj $ s_j $ .在和r一世F是(在ķ,sj,Dj) $ Verify(vk, s_j, D_j) $ 獲取驗證密鑰在ķ $ vk $ , 簽名s $ s $ 並檢查簽名是否正確簽名。通常在ķ $ vk $ 是公開的並且sķ $ sk $ 保密。在您的情況下,您的和nCr是p噸 $ Encrypt $ 應該替換為小號一世Gn $ Sign $ 和D和Cr是p噸 $ Decrypt $ 應該替換為在和r一世F是 $ Verify $ .

引用自:https://crypto.stackexchange.com/questions/100931