ОТЧЕТ О АУДИТЕ CONSENSYS DILIGENCE.

in #keep4 years ago

Оригинал отчета находится по ссылке https://consensys.net/diligence/audits/2020/02/thesis-tbtc-and-keep/

1 Обзор
Этот документ является результатом разработки и проверки кода криптографических конструкций и алгоритмов, используемых в сети хранения. Этот криптографический обзор был проведен в рамках аудита TBTC и Keep.

1.1 Объем
Обзор проекта основан на документах в репозитории keep-core [KC20] и в Желтой книге Keep Random Beacon [KN20] . Обзор оценивает надежность протокола и правильное использование криптографических элементов. Это не подробный криптографический анализ используемых криптографических алгоритмов.
Проверка кода основана на исходном коде в репозитории keep-core. Цель проверки кода - убедиться, что криптографические примитивы используются надлежащим образом и с соблюдением надлежащей криптографической гигиены. Это не является формальным доказательством правильности или гарантией отсутствия дефектов в коде. Обратите внимание, что использованная реализация ECDSA [KD20] исключена из этого обзора и считается правильной.

2 Обзор дизайна

2.1 Обзор конструкции
Основным справочным материалом для обзора проекта является «Желтая книга сети Keep» [KN20] , в которой описывается как архитектура схемы случайных маяков, так и протокол продажи билетов на основе выходных данных случайных сигналов маяков. В документе описывается ряд возможных атак и демонстрируется эффективность протокола в предотвращении этих атак.

2.2 Элементы дизайна
Протокол GJKR
Функция Keep Random Beacon реализована с использованием протокола генерации распределенного ключа GJKR [GJKR99] . Хотя существуют более ранние протоколы для генерации распределенных ключей, GJKR был первым, кто застраховал, что злоумышленники не могут повлиять на окончательное значение сгенерированного закрытого ключа. GJKR широко изучается и внедряется более двадцати лет без каких-либо существенных недостатков.

Вариант протокола GJKR, используемый в Keep Network, изменяет исходную спецификацию для работы по одному общему каналу, а не по отдельным каналам между участниками. Он также добавляет возможность явно идентифицировать участников, нарушающих протокол. Ни одно из этих изменений не влияет на общие свойства безопасности протокола, которые должны быть сопоставимы по безопасности с исходной схемой GJKR.

ECDSA
Алгоритм подписи, используемый в качестве основы для используемого здесь протокола GJKR, представляет собой алгоритм цифровой подписи с эллиптической кривой [NIST13] . ECDSA - установленный стандарт для цифровых подписей на эллиптических кривых, который изучается и используется в течение многих лет.
Во время обзора проекта было предложено, чтобы запрос на подпись должен включать фактические подписываемые данные, а не только дайджест-значение. Мы пришли к выводу, что если злоумышленник может создать ложные пары дайджеста и сигнатуры из действительной пары, то либо базовая схема подписи, либо используемая хеш-функция должны быть нарушены. Поскольку безопасность протокола предполагает надежность как алгоритма хеширования, так и схем подписи, нет необходимости включать прообраз.
AltBN_128 Кривая
AltBN_128Эллиптическая кривой [YCKS19] широко используются в существующих приложениях Эфириума. Это эффективный выбор кривой и соответствующий размер поля, соответствующий другим криптографическим алгоритмам, используемым в протоколе.

Не было опубликовано никаких конкретных криптографических атак на AltBN_128 кривую, но недавние математические достижения [KB16] вызвали опасения по поводу ее уровня безопасности.
Усовершенствованная версия сита числового поля, специфичная для модулей, используемых в кривых, удобных для сопряжения, привела к выводу, что AltBN_128и аналогичные кривые предлагают примерно 96 бит безопасности, а не ожидаемые 128.
Это не катастрофическая атака, и ее еще предстоит реализовать на практике, но она предполагает изменения на будущее. Более широкое сообщество Ethereum рассматривает другие кривые, удобные для спаривания, с большим размером основного поля, такие как кривая BLS12–381 [YCKS19] .

Нет необходимости немедленно отказываться от AltBN_128кривой, но криптографическая осмотрительность предлагает сделать реализацию кривой как можно более модульной. Это позволяет заменить новую кривую в будущем без сложных изменений в конструкции и кодовой базе.

SHA2–256
Алгоритм подписи основан на использовании защищенной хеш-функции, которая, как предполагается, устойчива к атакам с использованием прообраза и коллизии. В этой схеме используется хеш-функция 256-битного варианта алгоритма SHA-2, который является частью стандарта безопасного хеширования NIST [NIST15] .

Использование 256-битной хеш-функции уместно в сочетании с AltBN_128эллиптической кривой. В то время как коллизионные атаки были обнаружены против более ранних алгоритмов серии SHA [WYY05] , SHA2-256 на сегодняшний день обеспечивает ожидаемый уровень устойчивости к атакам с прообразами и коллизиями.

2.3 Рекомендации по дизайну
Использование AltBN_128кривой должно быть, насколько это возможно, модульным, чтобы можно было использовать альтернативную кривую в будущих реализациях. Это может потребоваться, если использование AltBN_128кривой не рекомендуется в Ethereum в какой-то момент в будущем.

В разделе «Желтая книга», озаглавленном «Интерактивный протокол», говорится, что второй вариант для неинтерактивной версии протокола нарушает требование 5 для протокола, но в документе перечислены только четыре требования. Я считаю, что следует указать требование 4.

3 Проверка кода
Репозиторий keep-core содержит как готовый, так и твердый код, который реализует систему, описанную в Желтой книге Keep Network [KN20] . В ходе этого обзора критических проблем обнаружено не было.
Модули исходного кода, которые используют или реализуют криптографические операции, перечислены ниже вместе с некоторыми наблюдениями по каждому модулю.

3.1 Кодовые модули
/pkg/beacon/relay/gjkr/protocol.go
Этот модуль представляет собой реализацию протокола генерации распределенных ключей GJKR, как указано в Yellow Paper.
GenerateEphemeralKeyPair()Функция соответствует должным образом с этапом 1 протокола , как определена в желтой бумаге.
GenerateSymmetricKeys()Функция соответствует должным образом с фазой 2 протокола , как определена в желтой бумаге.
Эта CalculateMembersSharesAndCommitments()функция правильно соответствует Фазе 3 протокола, как определено в Желтой книге.
VerifyReceivedSharesAndCommitmentsMessages()Функция соответствует должным образом с фазой 4 протокола , как определена в желтой бумаге.
ResolveSecretSharesAccusationsMessages()Функция соответствует должным образом с этапом 5 протокола , как определена в желтой бумаге.
Эта CombineMemberShares()функция правильно соответствует Фазе 6 протокола, как определено в Желтой книге.
Эта CalculatePublicKeySharePoints()функция правильно соответствует Фазе 7 протокола, как определено в Желтой книге.
VerifyPublicKeySharePoints()Функция соответствует должным образом с этапом 8 протокола , как определена в желтой бумаге.
ResolvePublicKeySharePointsAccusationsMessages()Функция соответствует должным образом с этапом 9 протокола , как определена в желтой бумаге.
RevealMisbehavedMembersKeys()Функция соответствует должным образом с этапом 10 протокола , как определена в желтой бумаге.
ReconstructMisbehavedIndividualKeys()Функция соответствует должным образом с этапом 11 протокола , как определена в желтой бумаге.
findPublicKey()Функция соответствует должным образом с этапом 12 протокола , как определена в желтой бумаге.

/pkg/beacon/relay/dkg/result/signing.go
Этот модуль вычисляет общую подпись.
SignDKGResult()Функция выполняет надлежащую проверку ошибок как на хэш и подпись вычислений

/pkg/altbn128/altbn128.go
Этот модуль реализует все операции с эллиптической кривой на altbn_128кривой.
Библиотека Cloudflare используется для арифметики больших чисел.
Параметры AltBN_128кривой определены правильно.
Кажется, что операции с кривой реализованы правильно.

/pkg/bls/bls.go
Этот модуль реализует алгоритм распределенной подписи BLS.
Функции Sign()и Verify()вызывают соответствующие операции в altbn128.
RecoverSignature()Функция выполняет надлежащую проверку на отдельные акции и пороговым тестирования на количество акций.

/pkg/operator/key.go
Этот модуль генерирует ключи ECDSA и управляет ими.
GenerateKeyPair()Функция генерирует пару ключей ECDSA для участников протокола.

/pkg/chain/local/signing.go
Этот модуль выполняет локальные подписи с использованием алгоритма ECDSA.
Местное подписание и проверка подписей ECDSA осуществляются Sign()и Verify()функциями.
Входные данные проверяются должным образом, и в обеих функциях выполняется надлежащая проверка ошибок.

/contracts/solidity/contracts/cryptography/AltBn128.sol
Этот модуль реализует все операции с эллиптической кривой в твердом состоянии на altbn_128кривой.
Внутренняя библиотека ( /contracts/solidity/contracts/utils/ModUtils.sol) используется для арифметики больших чисел.
Параметры AltBN_128кривой определены правильно.
Кажется, что операции с кривой реализованы правильно.

/contracts/solidity/contracts/cryptography/BLS.sol
Этот модуль надежно реализует алгоритм распределенной подписи BLS.
Функции sign()и verify()вызывают соответствующие операции в AltBn128.sol.

3.2 Рекомендации по Коду
В этом обзоре не было выявлено никаких существенных проблем, которые потребовали бы внесения изменений в код. В обзоре проекта рекомендуется разбить операции на эллиптическую кривую по модулям, чтобы в будущем можно было использовать новые кривые. Это можно сделать, создав «класс-оболочку» для операций с кривыми с идентификатором кривой в качестве члена класса. Это позволит использовать новые кривые без серьезных изменений всего кода, использующего кривые.

  1. Выводы
    При криптографической проверке дизайна и кода не было обнаружено никаких существенных проблем. Дизайн четко и полностью указан в Желтой книге, и это хорошее применение широко изученной схемы подписи GJKR. Используемые криптографические примитивы подходят и соответствуют лучшим отраслевым практикам. Код четко написан, и вызовы криптографических алгоритмов следуют надлежащей криптографической гигиене как при проверке параметров, так и при очистке.

Приложение 1 - Ссылки
[GJKR99] Р. Дженнаро, С. Ярецки, Х. Кравчик и Т. Рабин. Достижения в криптологии - EUROCRYPT '99: Международная конференция по теории и применению криптографических методов Прага, Чешская Республика, 2–6 мая 1999 г. Слушания, глава «Безопасное распределенное создание ключей для криптосистем на основе дискретных журналов», страницы 295–310. Springer Berlin Heidelberg, Берлин, Гейдельберг, 1999; http://groups.csail.mit.edu/cis/pubs/stasio/vss.ps.gz
[KB16] Т. Ким и Р. Барбулеску, «Расширенное решето поля чисел башни: новая сложность для случая среднего простого числа», Успехи в криптологии - CRYPTO 2016, LNCS 9814 (2016), 543–571.
[KC20] https://github.com/keep-network/keep-core
[KD20] https://github.com/keep-network/keep-ecdsa
[KN20] «Сохранять случайный маяк: реализация порогового реле», https://docs.keep.network/random-beacon/
[NIST13] Национальный институт стандартов и технологий, «Стандарт цифровой подписи», FIPS PUB 186–4, https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf , июль 2013 г.
[NIST15] Национальный институт стандартов и технологий, «Стандарт безопасного хеширования», FIPS PUB 180–4, https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf , август 2015 г.
[YCKS19] Ёнэдзава, Чикара, Кобяси и Сайто, «Кривые для создания пар», Интернет-проект, https://tools.ietf.org/id/draft-yonezawa-pairing-friendly-curves-00.html , январь 2019 г.
[WYY05] Ван, Инь и Ю, «Поиск коллизий в полном SHA-1», https://www.iacr.org/archive/crypto2005/36210017/36210017.pdf , август 2005 г.

Приложение 2 - Раскрытие информации
ConsenSys Diligence («CD») обычно получает компенсацию от одного или нескольких клиентов («Клиенты») за выполнение анализа, содержащегося в этих отчетах («Отчеты»). Отчеты могут распространяться другими способами, в том числе посредством публикаций ConsenSys и других средств распространения.
Отчеты не являются одобрением или обвинением в отношении какого-либо конкретного проекта или команды, и отчеты не гарантируют безопасность какого-либо конкретного проекта. Настоящий Отчет не рассматривает и не должен интерпретироваться как рассматривающий или имеющий какое-либо отношение к потенциальной экономике токена, продажи токена или любого другого продукта, услуги или другого актива. Криптографические токены - это новые технологии, которые несут в себе высокий уровень технического риска и неопределенности. Никакой Report не предоставляет никаких гарантий или заверений какой-либо Третьей стороне в каком-либо отношении, в том числе относительно безошибочного характера кода, бизнес-модели или владельцев любой такой бизнес-модели, а также соблюдения правовых норм в любом таком бизнесе. Никакая третья сторона не должна полагаться на Отчеты каким-либо образом, в том числе с целью принятия каких-либо решений о покупке или продаже любого токена, продукта, услуга или другой актив. В частности, во избежание сомнений, настоящий Отчет не является инвестиционным советом, не предназначен для использования в качестве инвестиционного совета, не является одобрением этого проекта или команды и не является гарантией абсолютной безопасности проект. CD не несет никаких обязательств перед третьими лицами в силу публикации этих отчетов.

ЦЕЛЬ ОТЧЕТОВ Отчеты и анализ, описанные в них, создаются исключительно для Клиентов и публикуются с их согласия. Объем нашего обзора ограничен обзором кода Solidity и только кода Solidity, который мы отмечаем как находящийся в рамках нашего обзора в этом отчете. Сам язык Solidity находится в стадии разработки и подвержен неизвестным рискам и недостаткам. Обзор не распространяется на уровень компилятора или любые другие области за пределами Solidity, которые могут представлять риски для безопасности. Криптографические токены - это новые технологии, которые несут в себе высокий уровень технического риска и неопределенности.

CD делает отчеты доступными для сторон, не являющихся Клиентами (т. Е. «Третьими сторонами») - на своем веб-сайте. CD надеется, что, сделав этот анализ общедоступным, он может помочь экосистеме блокчейнов разработать передовые технические методы в этой быстро развивающейся области инноваций.
ССЫЛКИ НА ДРУГИЕ ВЕБ-САЙТЫ С ЭТОГО ВЕБ-САЙТА Вы можете с помощью гипертекста или других компьютерных ссылок получить доступ к веб-сайтам, управляемым другими лицами, кроме ConsenSys и CD. Такие гиперссылки предоставляются только для ознакомления и удобства и являются исключительной ответственностью владельцев таких веб-сайтов. Вы соглашаетесь с тем, что ConsenSys и CD не несут ответственности за содержание или работу таких веб-сайтов, и что ConsenSys и CD не несут ответственности перед вами или любым другим физическим или юридическим лицом за использование сторонних веб-сайтов. За исключением случаев, описанных ниже, гиперссылка с этого веб-сайта на другой веб-сайт не подразумевает и не означает, что ConsenSys и CD одобряют содержимое этого веб-сайта или оператора или операции этого сайта. Вы несете единоличную ответственность за определение степени, в которой вы можете использовать любой контент на любых других веб-сайтах, на которые вы ссылаетесь из Отчетов. ConsenSys и CD не несут ответственности за использование стороннего программного обеспечения на веб-сайте и не несут никакой ответственности перед каким-либо физическим или юридическим лицом за точность или полноту любого результата, полученного с помощью такого программного обеспечения.

СВОЕВРЕМЕННОСТЬ СОДЕРЖАНИЯ Содержание отчетов актуально на дату их публикации в отчете и может быть изменено без предварительного уведомления. Если не указано иное, ConsenSys и CD.

Lin#8296

Sort:  

This post has been upvoted by @steemcurator06 who curates “The Community of Three Countries: Ukraine — Russia — Belarus” with the support of the Steem Community Curation Project.