Глоссарий / Справочник разработчика
PP pki type
- Что такое PP pki type?
- PP pki type был строкой из одного слова в запросе на оплату BIP70, которая указывала, как продавец подписал его: none, x509 с SHA-256 или x509 с SHA-1.
Определено в BIP-70.
Каждый протокол, который что-то подписывает, должен назвать алгоритм, а указание алгоритма в поле, которым управляет отправитель, открывает путь атакам понижения. BIP70 предлагал три значения, одно из которых считалось слабым за годы до того, как была написана спецификация. Браузеры завершили вытеснение сертификатов SHA-1 в январе 2017 года, а протокол платежей так и не выпустил обновление.
Как это работает
Статус: исторический. PP pki type был полем 2 в PaymentRequest со значением по умолчанию "none", и он отсутствует в Bitcoin Core начиная с версии 0.20.0 от 3 июня 2020 года.
Было определено три значения, и четвертое никогда не регистрировалось, хотя спецификация оставляла для него место.
"none" означало неподписанный запрос. Поле сертификата оставалось пустым, поле подписи оставалось пустым, и кошелек мог показать сумму и получателя, но никакой идентичности. Большинство запросов в реальной работе были именно такими.
"x509+sha256" означало, что продавец сериализовал все сообщение с пустым полем подписи, вычислил хеш результата с помощью SHA-256 и подписал этот хеш приватным ключом, принадлежащим первому сертификату в приложенной цепочке.
"x509+sha1" означало ту же процедуру с заменой SHA-256 на SHA-1.
Именно предложение слабого варианта и представляет интерес. Проверяющая сторона, которая принимает любой алгоритм, названный отправителем, так же надежна, как худший алгоритм, который она еще принимает, поэтому более поздние проекты фиксируют допустимый набор на стороне проверяющего, а не считывают его из сообщения. SHA-1 был плохим кандидатом даже в 2013 году. Атака на коллизии быстрее полного перебора была опубликована в 2005 году, а NIST запретил использовать SHA-1 для создания новых цифровых подписей после 2013 года. Удостоверяющие центры прекратили выдачу сертификатов SHA-1 в конце 2015 года, Chrome 56 перестал им доверять в январе 2017 года, а через месяц последовала полная публичная коллизия.
Где это встречается
Сам биткоин дает контрпример к алгоритму подписи, который называет отправитель, и его стоит держать в уме.
Транзакция биткоина никогда не согласовывает алгоритм подписи с тем, кто ее проверяет. Вопрос решает потраченный выход: выход до Taproot проверяется с помощью ECDSA над secp256k1, а выход, оплачивающий ключ Taproot, проверяется с помощью Schnorr по BIP340, правило, которое активировалось на блоке 709 632 в ноябре 2021 года. Отправитель не может предложить что-то более дешевое для взлома, потому что выбор был зафиксирован при получении биткоинов.
Это различие объясняет, почему слой на основе сертификатов так плохо ложился на биткоин. Правила консенсуса применяются одинаково ко всем и меняются только согласованным обновлением, тогда как поле, называющее алгоритм, представляет собой согласование, а согласования понижаются.
Если вы выбираете, где купить, а не пишете программное обеспечение, полезный вывод узок, но реален. Платформа, которая сохраняет устаревший криптографический вариант «для совместимости», показывает, как она взвешивает удобство и безопасность, и эта оценка распространяется и на те части системы, которые вы не можете проверить.
PP pki type vs SSL-подпись
PP pki type называл схему; SSL-подпись была результатом ее применения. Если считать их одним и тем же, старая документация BIP70 становится запутанной, потому что запрос мог называть тип и вовсе не нести подписи, а именно это и означало "none". Современный TLS сохраняет ту же пару, с идентификатором алгоритма, записанным рядом с байтами подписи, но клиент больше не принимает каждый идентификатор, который когда-то был допустим.