ЗВІТ ПРО АУДИТ CONSENSYS DILIGENCE.
Оригінал статті знаходиться за посиланням https://consensys.net/diligence/audits/2020/02/thesis-tbtc-and-keep/.
1 Огляд
Цей документ є результатом огляду проекту та коду криптографічних конструкцій та алгоритмів, що використовуються в мережі Keep. Цей криптографічний огляд був проведений як частина TBTC та постійного аудиту .
1.1 Сфера застосування
Огляд проекту базується на документах у сховищі Keep -Core [KC20] та Жовтому папері Keep Random Beacon [KN20] . Огляд оцінює надійність протоколу та відповідне використання криптографічних елементів. Це не детальний криптоаналіз використовуваних криптографічних алгоритмів.
Огляд коду базується на вихідному коді у сховищі Keep-Core. Метою огляду коду є забезпечення належного використання криптографічних примітивів та належної криптографічної гігієни. Це не є офіційним доказом правильності або гарантією того, що код не містить дефектів. Зверніть увагу, що використана реалізація ECDSA [KD20] виключається з цього огляду, і вважається правильною.
2 Огляд дизайну
2.1 Огляд конструкції
Основним посиланням на огляд проекту є Жовта книга Keep Network [KN20] , яка описує як архітектуру схеми випадкових маяків, так і протокол квитків на основі результатів випадкового маяка. Документ окреслює ряд можливих атак та демонструє ефективність протоколу щодо запобігання цим атакам.
2.2 Елементи дизайну
Протокол GJKR
Зберігати випадковий маяк реалізовано за допомогою протоколу генерації розподілених ключів GJKR [GJKR99] . Незважаючи на те, що існують попередні протоколи для генерації розподіленого ключа, GJKR першим запевнив, що зловмисні учасники не можуть впливати на остаточне значення сформованого приватного ключа. GJKR широко вивчається і впроваджується вже більше двадцяти років, без значних недоліків.
Варіант протоколу GJKR, що використовується в мережі Keep, змінює вихідну специфікацію для роботи над одним спільним каналом, а не окремими каналами між учасниками. Це також додає можливість чітко ідентифікувати учасників, які порушують протокол. Жодна з цих змін не впливає на загальні властивості захисту протоколу, які мають бути порівнянними за рівнем безпеки із вихідною схемою 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, частиною стандарту Secure Hash NIST [NIST15] .
Використання 256-бітової хеш-функції доречно у поєднанні з AltBN_128еліптичною кривою. Хоча атаки зіткнень були виявлені проти попередніх алгоритмів у серії SHA [WYY05] , SHA2-256 на сьогоднішній день забезпечив очікуваний рівень стійкості як до зображень, так і до атак зіткнень.
2.3 Рекомендації щодо проектування
Використання AltBN_128кривої повинно бути модульовано, наскільки це можливо, щоб дозволити альтернативну криву використовувати в майбутніх реалізаціях. Це може знадобитися, якщо використання AltBN_128кривої застаріло в Ethereum в якийсь момент у майбутньому.
У розділі "Жовта книга", позначеному як "Інтерактивний протокол", зазначається, що другий варіант неінтерактивної версії протоколу порушує вимогу 5 до протоколу, але в документі перелічено лише 4 вимоги. Я вважаю, що він повинен визначати вимогу 4.
3 Огляд коду
Репозиторій keep-core містить код, як у форматі go, так і в цілісності , який реалізує систему, описану в жовтій книзі Keep Network [KN20] . Жодних критичних проблем під час цього огляду не виявлено.
Модулі вихідного коду, які використовують або реалізують криптографічні операції, перелічені нижче, разом із деякими спостереженнями щодо кожного модуля.
3.1 Модулі коду
/pkg/beacon/relay/gjkr/protocol.go
Цей модуль є реалізацією протоколу розподіленого генерування ключів GJKR, як зазначено в Жовтій книзі.
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()and Verify()викликають відповідні операції в altbn128.
RecoverSignature()Функція виконує належну перевірку на окремі акції і граничним тестування на кількість акцій.
/pkg/operator/key.go
Цей модуль генерує та управляє ключами ECDSA.
GenerateKeyPair()Функція генерує пару ключів ECDSA для учасників протоколу.
/pkg/chain/local/signing.go
Цей модуль виконує локальні підписи, використовуючи алгоритм ECDSA.
Місцеве підписання та перевірка підписів ECDSA здійснюється функціями Sign()and 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()and verify()викликають відповідні операції в AltBn128.sol.
3.2 Рекомендації щодо кодексу
У цьому огляді не було виявлено суттєвих проблем, які вимагали б внесення змін до кодексу. Огляд проекту рекомендує модулювати операції еліптичної кривої, щоб нові криві могли використовуватися в майбутньому. Це можна зробити, створивши "клас-обгортку" для кривих операцій з ідентифікатором кривої як членом класу. Це дозволило б використовувати нові криві без значних змін у всьому коді, що використовує криві.
- Висновки
У криптографічному огляді дизайну та коду значних проблем не виявлено. Дизайн чітко і повністю зазначений в Жовтій книзі, і він є обґрунтованим застосуванням широко вивченої схеми підпису 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] Національний інститут стандартів і технологій, "Secure Hash Standard", 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 та інші розповсюдження.
Звіти не є схваленням чи обвинувальним актом будь-якого конкретного проекту або команди, і Звіти не гарантують безпеки будь-якого конкретного проекту. Цей звіт не враховує і не повинен трактуватися як такий, що розглядає потенційну економіку маркера, продажу маркера чи будь-якого іншого товару, послуги чи іншого активу чи має якийсь вплив на нього. Криптографічні токени - це нові технології, які несуть із собою високий рівень технічного ризику та невизначеності. Жоден звіт не надає жодних гарантій чи представництв будь-яким третім сторонам у будь-якому відношенні, включаючи природу коду, що не містить помилок, бізнес-модель або власників будь-якої такої бізнес-моделі та юридичну відповідність будь-якого такого бізнесу. Жодна третя сторона не повинна покладатися на Звіти будь-яким чином, в тому числі з метою прийняття рішень щодо купівлі або продажу будь-якого маркера, товару, послуга чи інший актив. Зокрема, щоб уникнути сумнівів, цей звіт не є інвестиційною порадою, не покладається на нього як інвестиційну консультацію, не є схваленням цього проекту або команди і не є гарантією абсолютної безпеки проекту. Компанія CD не зобов'язана будь-яким третім сторонам в силу публікації цих звітів.
МЕТА ЗВІТІВ Звіти та аналіз, описані в них, створюються виключно для Клієнтів та публікуються за їх згодою. Обсяг нашого огляду обмежений оглядом коду Solidity і лише код Solidity, який, як ми зазначаємо, входить в обсяг нашого огляду в цьому звіті. Сама мова Solidity залишається в стадії розробки і піддається невідомим ризикам та вадам. Огляд не поширюється на рівень компілятора або будь-які інші сфери, крім Solidity, які можуть створювати ризики для безпеки. Криптографічні токени - це нові технології, які несуть із собою високий рівень технічного ризику та невизначеності.
Компанія CD робить Звіти доступними для інших осіб, крім Клієнтів (тобто "третіх сторін"), на своєму веб-сайті. CD сподівається, що, зробивши ці аналізи загальнодоступними, це може допомогти екосистемі блокчейну розвивати найкращі технічні практики в цій швидко розвивається галузі інновацій.
ПОСИЛАННЯ НА ІНШІ ВЕБ-САЙТИ З ЦЬОГО ВЕБ-САЙТУ Ви можете, за допомогою гіпертексту або інших комп'ютерних посилань, отримати доступ до веб-сайтів, якими керують особи, крім ConsenSys та CD. Такі гіперпосилання надаються виключно для ознайомлення та для зручності та є виключною відповідальністю власників таких веб-сайтів. Ви погоджуєтесь, що ConsenSys та CD не несуть відповідальності за зміст або роботу таких веб-сайтів, і що ConsenSys та CD не несуть відповідальності перед вами чи будь-якою іншою особою або організацією за використання сторонніх веб-сайтів. За винятком випадків, описаних нижче, гіперпосилання з цього веб-сайту на інший веб-сайт не означає або означає, що ConsenSys та CD підтримують вміст цього веб-сайту або оператора або операцій цього веб-сайту. Ви несете повну відповідальність за визначення того, наскільки ви можете використовувати будь-який вміст на будь-яких інших веб-сайтах, на які ви посилаєтесь із Звітів. ConsenSys і CD не несе відповідальності за використання програмного забезпечення третьої сторони на Веб-сайті і не несе жодної відповідальності перед будь-якою фізичною або юридичною особою за точність або повноту будь-яких результатів, отриманих таким програмним забезпеченням.
СВОЄЧІСТЬ ЗМІСТУ Зміст, що міститься у Звітах, є актуальним на дату, що міститься у Звіті, і може бути змінений без повідомлення. Якщо не вказано інше, ConsenSys та CD.
Lin#8296
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.