Encryption

如何使用 DSA 正確簽名和驗證?誰能發現我的錯誤?

  • April 5, 2020

我試圖回答的問題如下:

10.14。DSA 的參數由 p = 59,q = 29,α = 3 給出,Bob 的私鑰為 d = 23。顯示以下雜湊值 h(x) 的簽名 (Bob) 和驗證 (Alice) 的過程和臨時密鑰 kE:

  1. h(x) = 17,kE = 25
  2. h(x) = 2,kE = 13
  3. h(x) = 21,kE = 8

我設法正確計算出第 1 部分,然後在第 1 部分之後對其他兩個部分進行建模,但問題是第 2 部分和第 3 部分在驗證階段都無效,我很確定它們應該有效。這是我的工作:

  1. h(x) = 17,kE = 25

世代(鮑勃):

Chooses values p=59, q=29, α=3, d=23
Computes β = αd = 323 mod 59= 45 mod 59
sends (p, q, α, β)= (59, 29, 3, 45)
Actual signature generation:
compute hash message of h(x)= 17
1. choose enphemeral key kE = 25
2. r=(α^kE mod p) = 3^25 mod 59 = 51 mod 59
3. s= (h(x)+d*r)*α= (17+23*51)*3= 3,570 mod 59= 30 mod 59

sends (x,(r,s))= (x,(51, 30))

驗證(愛麗絲):

1. w= r^(-1) mod q = 51^(-1) mod 29= 22^(-1) mod 29 ← solve using EEA (Euler’s Extended Algorithm)
   29= 22(1)+7
   22= 7(3)+1
   -----------
   1= 22+ 7(-3)            //Set equal to 1
     = 22+ (29+22(-1))(-3) //Substitute
     =29(-3)+ 22(4)        //Distribute
    22^(-1) mod 29 = 4 mod 29
2. u1= w*h(x) mod q = 4*17 = 68 mod 29 = 10 mod 29
3. u2= w*r mod q = 4*51= 204 mod 29= 1 mod 29 
4. v = (α^(u1) * β^(u2) mod p)mod q
   = (3^(10)*45^(1)) mod 59) mod 29
   = (59,049*45 mod 59)mod 29 
   =(2,657,205 mod 59)mod 29
   =  22 mod 29
5. v=22,
r mod q= 51 mod 29 = 22 mod 29
v = r mod q → Valid signature 
  1. h(x) = 2,kE = 13

世代(鮑勃):

Chooses values p=59, q=29, α=3. d=23
Computes β = αd = 323 mod 59= 45 mod 59
sends (p, q, α, β)= (59, 29, 3, 45)

Actual signature generation
compute hash message of h(x)= 2
1. choose enphemeral key kE = 13
2. r=(α^(kE) mod p) = 3^(13) mod 59 = 1,594,323 mod 59 = 25 mod 59
3. s= (h(x)+d*r)*α= (2+23*25)*3= 1,731 mod 59= 20 mod 59
sends (x,(r,s))= (x,(25, 20))

驗證(愛麗絲):

1. w= r^(-1) mod q = 25^(-1) mod 29 ← solve using EEA (Euler’s Extended Algorithm)
   29= 25(1)+4
   25= 4(6)+1
   --------------------
   1= 25+ 4(-6)             //Set equal to 1
     = 25+ (29+25(-1))(-6)  //Substitute
     =29(-6)+ 25(7)         //Distribute
    25^(-1) mod 29 = 7 mod 29
2. u1= w*h(x) mod q = 7*2 = 14 mod 29
3. u2= w*r mod q = 7*25= 175 mod 29= 1 mod 29 
4. v = (α^(u1) * β^(u2) mod p)mod q
   = (3^(14)*45^(1) mod 59) mod 29
   = (4,782,969*45 mod 59)mod 29 
   =(215,233,605 mod 59)mod 29
   =  12 mod 29
5. v=12, r mod q= 25 mod 29
v ≠ r mod q → Invalid signature 
  1. h(x) = 21,kE = 8

世代(鮑勃):

Chooses values p=59, q=29, α=3. d=23
Computes β = αd = 323 mod 59= 45 mod 59
sends (p, q, α, β)= (59, 29, 3, 45)

Actual signature generation
compute hash message of h(x)= 21
1. choose enphemeral key kE = 8
2. r=(α^(kE) mod p) = 3^(8) mod 59 = 6,561 mod 59 = 12 mod 59
3. s= (h(x)+d*r)*α= (21+23*12)*3= 891 mod 59= 6 mod 59
sends (x,(r,s))= (x,(12, 6))

驗證(愛麗絲):

1. w= r-1 mod q = 12^(-1) mod 29 ← solve using EEA (Euler’s Extended Algorithm)
   29= 12(2)+5
   12= 5(2)+2
   5= 2(2)+1
   ------------------
   1= 5+2(-2)                  //Set equal to 1
     = 5+(12+5(-2))(-2)        //Substitute
     =12(-2)+ 5(5)             //Distribute
     = 12(-2)+(29+12(-2))(5)   //Substitute
     =29(5)+ 12(-12)           //Distribute
    12^(-1) mod 29 =-12 mod 29 
   w= 17 mod 29
2. u1= w*h(x) mod q = 17*21 = 357 mod 29= 9 mod 29
3. u2= w*r mod q = 17*12= 204 mod 29= 1 mod 29 
4. v = (α^(u1) * β^(u2) mod p)mod q
   = (3^(9)*45^(1) mod 59) mod 29
   = (19,683*45 mod 59)mod 29 
   =(885,735 mod 59)mod 29
   =  27 mod 29
5. v=27, r mod q= 12 mod 29
v ≠ r mod q → Invalid signature 

我不知道我做錯了什麼。我檢查了我的答案幾次,所以如果有人能指出我犯的我看不到的錯誤,我將不勝感激!

保留您的符號,DSA 中的簽名生成如下:

  • $ r = (\alpha^{kE} \bmod p) \bmod q $
  • $ s = kEinv \times (h(x) + d\times r) \bmod q $

在哪裡 $ kEinv $ 是的模逆 $ kE $ 模組 $ q $ .

但你實際上做的是使用公式 $ s= (h(x)+d\times r) \times \alpha \bmod q $ ,你忘了減少 $ r $ 模組 $ q $ . 您可以查看維基百科頁面

錯誤中:

  • 在適當的 DSA 中, $ s=\left({k_E}^{-1}\right),\left(h(x)+d,r\right)\bmod q $ , 不是 $ s=\left(h(x)+d,r\right),α\bmod p $ 就像問題一樣。
    必須執行該計算(包括缺少的模逆) $ \bmod q $ ; 和 $ α $ 是不需要的。這主要是阻止某些範例工作的原因。
  • 在適當的 DSA 中, $ r=\left(α^{k_E}\bmod p\right)\bmod q $ , 不是 $ r=\left(α^{k_E}\bmod p\right) $ 就像問題一樣。
    刪除決賽 $ \bmod q $ 是非標準的,並阻止符合標準的 DSA 接受某些簽名,因為 $ r $ 應檢查是否在範圍內 $ (0,q) $ 作為簽名驗證的初步步驟。但是,它不會干擾簽名生成或驗證的其餘部分,它操縱 $ r $ 摩爾洛 $ q $ ; 並且由於數量不是太危險 $ α^{k_E}\bmod p $ 作為簽名驗證過程的一部分被重新計算(儘管不同)。儘管如此,該方案還是失去了強烈的難忘性
  • 缺少指數符號和拼寫錯誤,例如β = αd = 323 mod 59= 45 mod 59應該是 $ β=α^d\bmod p=3^{23}\bmod59=45 $ .
  • 這個問題通常會增加額外的mod內容,從而掩蓋預期的含義。上面的例子:68 mod 29 = 10 mod 2968 mod 29 = 10是正確的陳述結果是10,而不是68or 39
    請記住 $ u\bmod n $ 是唯一定義的整數 $ v $ 在範圍內 $ [0,n) $ 和 $ u-v $ 倍數 $ n $ ,而不是整數集的(成員) $ u-v $ 倍數 $ n $ , 那是 $ v\equiv u\pmod n $ .
    這種區別在加密貨幣中通常很重要。例如,不正確的 $ r=\left(α^{k_E}\bmod p\right) $ 的問題確實驗證 $ r\equiv\left(α^{k_E}\bmod p\right)\pmod q $ ,這就是為什麼它從製作可驗證簽名的角度來看是有效的;但通常它不會驗證 $ r=\left(α^{k_E}\bmod p\right)\bmod q $ ,根據一致性和安全性的要求。

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