DSA 生成簽名並驗證
我正在嘗試使用以下參數為 DSA 生成簽名:
$ p = 23 $ , $ q = 11 $ , $ g = 3 $ , $ H(m) = 8 $ , $ x = 5 $
為了我的一生,我不能隨意選擇 $ k $ ( $ 0 > k > q $ ) 那會給我 $ r $ , $ s $ 計算時“加起來” $ w $ , $ u1 $ , $ u2 $ ,並驗證。
我不知道我是否只是做錯了數學,但我已經嘗試了所有可能的方法 $ k $ 之間 $ 0 $ 和 $ 11 $ 而我就是無法得到 $ v = r $ 在驗證結束時。
如果可能的話,有人可以幫忙並展示你的鍛煉嗎?
好的,回到我最初的答案(我編輯到最後一個版本,認為你沒有選擇合適的生成器):
我現在認為您可能會錯誤地計算倒數:
我試過了 $ k=2 $ 並得到:
$ r=9,k^{-1}=6, s=10, w=10, u_1=3, u_2=2 $ 這行得通。
就像附加評論一樣:
選擇發電機
由於訂單 $ 11 $ 是素數,你可以簡單地選擇一個任意元素 $ Z_{23}^* $ , 說 $ h $ ,然後計算你的 $ g $ 作為 $ g=h^{22/11} \pmod{23} $ ,即位於該子群中的每個元素都是該子群的生成器。
舉個例子 $ h=2 $ 併計算 $ g=h^{2}\pmod{23}=4 $ (在你的情況下, $ 3 $ 也很好)。
**一般情況:*對於一般情況 $ Z_p^ $ 和 $ p $ 素數,一個元素 $ g $ 是一個生成器,如果它對訂單的所有主要除數都成立 $ p-1 $ 以下成立:
$ g^{(p-1)/q_i}\neq 1 \pmod{p} $ .
通常,您建構 $ p $ 作為安全素數,即選擇素數 $ q $ 並設置 $ p=2q+1 $ 因為,那麼你知道主要除數 $ 2 $ 和 $ q $ 通過施工。