Недавно (20 июня 2019 года) на Cryptology ePrint Archive была опубликована статья "SoK of Used Cryptography in Blockchain". Данный пост - двадцать второй в запланированной серии, содержащей любительский перевод этой статьи.
Систематизация знаний по используемой криптографии в блокчейне
(перевод с английского
статьи
Mayank Raikwar, Danilo Gligoroski and Katina Kralevska
SoK of Used Cryptography in Blockchain
Cryptology ePrint Archive, Report 2019/735
https://eprint.iacr.org/2019/735)
Аннотация
(перевод аннотации здесь)
1 Введение (перевод введения здесь)
1.1 Наш вклад (перевод здесь)
2 Методология исследования (перевод здесь)
3 Основные понятия блокчейна
3.1 Криптографическая хэш-функция (перевод здесь)
3.2 Механизмы консенсуса (перевод здесь)
3.3 Сетевая инфраструктура (перевод здесь)
3.4 Типы блокчейна (перевод здесь)
4 Проблемы в блокчейн
4.1 Безопасность и приватность (перевод здесь)
4.2 Проблемы масштабируемости (перевод здесь)
4.3 Форкинг (перевод здесь)
4.4 Производительность (перевод здесь)
4.5 Энергопотребление (перевод здесь)
4.6 Инфраструктурные зависимости (перевод здесь)
5. Обзор используемых криптографических понятий в блокчейне
5.1 Схема подписи (перевод здесь)
5.2 Доказательства с нулевым разглашением (перевод здесь)
5.3 Контроль доступа (перевод здесь)
5.4 Схема шифрования (перевод здесь)
5.5 Безопасные многосторонние вычисления (перевод здесь)
5.6 Разделение секрета (перевод здесь)
5.7 Схема обязательств
Схема обязательств — это цифровой аналог запечатанного конверта. Это игра между двумя сторонами, состоящая из двух этапов: фаза привязки и фаза раскрытия. Фаза привязки включает в себя сокрытие и связывание секрета первой стороной и отправку его второй стороне; в то время как фаза раскрытия должна доказать, что первая сторона не обманывала вторую сторону на этапе привязки. Следовательно, схема обязательств удовлетворяет двум вышеупомянутым свойствам безопасности: сокрытию и связыванию. Сокрытие гарантирует, что получатель не сможет увидеть сообщение до фазы раскрытия, а привязка гарантирует, что отправитель не сможет изменить сообщение после фазы привязки. В следующем примере показано связывающее обязательство:
1. Выберите секретное значение s для привязки от 0 до p-1, где p — большое простое число;
2. Вычислить значение .
3. Опубликуйте значение c как обязательство.
В приведенном выше примере свойство связывания следует из того, что отправитель не может найти любое другое значение y, которое дает то же самое c. Здесь нахождение значения s по известным c, p и g — сложная вычислительная задача дискретного логарифмирования, но любая сторона может проверить значение обязательства c, если указано s. Существует много схем обязательств, таких как обязательство Педерсена [155] и обязательство Педерсена на эллиптической кривой. Zerocoin [124] использует обязательство Педерсена для привязки серийного номера s к Zerocoin z. Обязательство c определяется следующим образом:
.
Здесь g, h и p всем известны, а пользователь выбирает s, z, вычисляет и публикует обязательство c. Эти s, z не могут быть вычислены из c, даже если оно предоставлено. Как следствие, в Zerocoin, когда публикуется серийный номер s, пользователь может подтвердить свое право собственности, предоставив z. Обязательство Педерсена также использовалось для создания ориентированной на блокчейн системы проверки диапазона, Bulletproof [96] и ее версия на эллиптических кривых также успешно реализованы в Monero [65]. Схема обязательств переключения предназначена для конфиденциальных транзакций в блокчейне [156].