Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 12821|Відповідь: 0

[C] Принцип верифікації цифрового підпису SM2

[Копіювати посилання]
Опубліковано 26.06.2019 10:09:45 | | |
SM2 — це алгоритм цифрового підпису, заснований на еліптичних кривих, і пояснення еліптичних кривих можна побачити в попередньому Weibo щодо еліптичних кривих, а нижче наведено короткий вступ до процесу підпису SM2.
Для підпису інформації EE це оригінальна інформація, отримана через хеш-функцію після певної обробки, алгоритм хешування використовує національний секретний алгоритм SM3, цей процес також пропускається, вводиться лише процес підписання ключа та верифікації.

1. Процес підписання
Нехай GG буде точкою відліку на еліптичній кривій, dAdA — приватний ключ, PAPA — публічний ключ, PA=dA∗GPA=dA∗G
Результат підпису (r,s) (r,s) отримується шляхом цифрового підписання EE, а процес розрахунку такий:
По-перше, оберіть випадкове число kk, звісно, вибір цього числа обмежений, і поки що його не чіпають.
Обчислимо r=e+x1r=e+x1, де (x1,y1)=k∗G(x1,y1)=k∗G
Обчислимо s=(1+dA)−1∗(k−r∗dA)s=(1+dA)−1∗(k−r∗dA)
Видно, що передня частина виконана приватним ключем.

2. Процес перевірки підпису
Перевірка підпису полягає у використанні отриманого підпису, публічного ключа, параметрів еліптичної кривої тощо для перевірки підпису, а основні етапи перевірки такі:
Спочатку обчисліть t=r+st=r+s, якщо t=0t=0, то це означає, що тест не пройшов.
Тоді точки на кривій (x1,y1) = s∗G+t∗ PA (x1,y1)=s∗G+t∗ PA обчислюються за tt і ss
Потім обчисліть R=x1+eR=x1+e, а потім перевіряйте, чи рівні RR і rr; якщо вони рівні, це означає, що перевірка завершена.

3. Принцип верифікації
Чому це можна перевірити, можна так само вивести:
(x1,y1)=s∗G+t∗PA =s∗G+(r+s)∗PA =s∗G+(r+s)∗dA∗G=(1+dA)∗s∗G+r∗dA∗G=(1+dA)∗(1+dA)−1∗(k−r∗dA)∗G+r∗dA∗G=(k−r∗dA)∗G+r∗dA∗G=k∗G(x1,y1)=s∗G+t∗PA =s∗G+(r+s)∗PA =sG+(r+s)PA =sG+(r+s)PA =sG+tPA =sG+(r+s)PA =sPA =sG+(r+s)PA =sPA =sG+(r+s)PA = sG+(r+s)PA = sG+(r+s)PA) = sG+tPA =sG+(r+s)PA = sG+(r+s)PA = sPA) = sG+(r+s)PA = sG+tPA = stPA =sPA) = sG+tPA = sg+(r+s)PA = sG+tPA = stPA = sG+(r+s)            =s∗G+(r+s)∗dA∗G=(1+dA)∗s∗G+r∗dA∗G=(1+dA)∗(1+dA)−1∗(k−r∗dA)∗G+r∗dA∗G=(k−r∗dA)∗G+r∗dA∗G=k∗G
Видно, що ця точка на еліптичній кривій, отримана за відкритим ключем, узгоджується з точкою в момент підписування.
Потім додайте цей x1x1 і отриману інформацію, щоб перевірити, чи збігається вона з надісланим підписом rr, і він проходить.
---------------------
Автор: leowang666
Джерело: CSDN
Оригінал: https://blog.csdn.net/hugewaves/article/details/59205914
Повідомлення про авторське право: Ця стаття є оригінальною статтею блогера, будь ласка, додайте посилання на блог-пост для повторного друку!





Попередній:【Original】Google AdSense wire transfer collection tutorial
Наступний:Зв'язування з кутовими подіями/атрибутами @HostListener, @HostBinding
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com