Насколько я понимаю, одноразовую подпись Винтерница делают:
- Создание массива закрытых ключей.
- Создание массива открытых ключей путем хеширования каждого закрытого ключа X раз, где X — это количество различных возможных символов, которые могут появиться в каждой позиции сообщения (или хеша сообщения) для проверки.
- Создание массива хэшей в качестве подписи путем хеширования каждого закрытого ключа X минус «порядковый номер символа» раз.
- Проверка подписи путем подсчета количества хеширования каждого из хэшей подписи для достижения открытого ключа и интерпретация этого подсчета как порядкового номера символа. Затем с помощью этих чисел мы можем сформировать сообщение (или хэш сообщения), которое затем продемонстрирует, что сообщение было действительным.
Следовательно, например, если мы подписываем шестнадцатеричными цифрами, X будет равно 15, поскольку символы будут идти от 0 (1-й символ, представляющий 0 итераций) до F (16-й символ, представляющий 15 итераций). Таким образом, сколько бы раз нам ни нужно было хешировать подпись, чтобы получить открытый ключ, она будет представлять определенное значение, от 0 до 15 раз (что дает фактически 16 возможностей). А если оно никогда не достигает его, то оно недействительно.
Сказав это, я прочитал, что слабость заключается в том, что подпись может быть изменена, потому что, например, если один подписанный символ - это A, то информации достаточно для хеширования также B, C, D, E и F. Тогда , по мнению многих, в том числе этот сайт, решение состоит в том, чтобы сделать контрольную сумму.
И вот тут я застрял. Я также не понимаю, как реализовать контрольную сумму. Я нашел несколько объяснений, но все они слишком технические или слишком расплывчатые и не говорят мне точно, простыми словами, как сделать эту контрольную сумму.
Пожалуйста, объясните мне, как сделать контрольную сумму простым языком, который может понять каждый.
И, если возможно, прокомментируйте, как эта контрольная сумма не могла быть испорчена. Спасибо.