Глоссарий / Справочник разработчика
PP pki data
- Что такое PP pki data?
- PP pki data представляло собой поле в запросе на платеж BIP70, которое содержало сертификаты продавца в кодировке DER: сначала конечный сертификат, за ним промежуточные, а корневой отсутствует.
Определено в BIP-70.
Подпись ничего не стоит без публичного ключа, которым ее проверяют, а BIP70 передавал этот ключ внутри сертификата, а не отдельно. Поле содержало небольшую обертку protobuf вокруг списка необработанных сертификатов DER, упорядоченных от продавца наружу. От его содержимого зависело, покажет ли кошелек название компании или простое предупреждение.
Как это работает
Статус: исторический. PP pki data было полем 3 из пяти в сообщении PaymentRequest, и Bitcoin Core удалил код, который его читал, в версии 0.20.0, выпущенной 3 июня 2020 года.
Внутри этих байтов находилось сообщение protobuf под названием X509Certificates с ровно одним повторяющимся полем, каждый элемент которого представлял собой полный сертификат в двоичной форме. Порядок был задан, а не оставлен на усмотрение: сначала шел собственный сертификат продавца, затем промежуточные сертификаты, нужные для достижения публичного корневого сертификата.
Сам корневой сертификат намеренно отсутствовал, и это рассуждение выходит далеко за рамки BIP70. Корневой сертификат, полученный от той стороны, которую вы пытаетесь проверить, ничего не доказывает, поскольку любой может создать такой сертификат и подписать им что угодно. Доверие должно приходить из списка, который уже хранится в вашем устройстве.
DER, используемая кодировка, является канонической двоичной формой ASN.1: одна структура, ровно одна допустимая последовательность байтов. Привычный формат PEM со строками BEGIN CERTIFICATE представляет собой те же байты в base64, что занимает примерно на треть больше места, поэтому сетевой формат всегда необработанный.
Сертификаты определяли размер запроса. Выходы, отметка времени и примечание могли вместе составлять пару сотен байтов, тогда как один сертификат RSA-2048 несет модуль длиной 256 байт и подпись длиной 256 байт, еще до подсчета каких-либо имен или расширений, а два таких подряд доходят до тысяч байтов. Когда pki type был "none", поле просто оставалось пустым, и кошельку было нечего показать, кроме адреса назначения.
Где это встречается
Тот же список сертификатов, в том же порядке, начиная с конечного сертификата, приходит при каждом HTTPS-соединении, которое вы устанавливаете.
TLS-сервер отправляет первым собственный сертификат, а затем промежуточные, опуская корневой по указанной выше причине. Точный список, который отправляет любой сайт, можно прочитать одной командой, openssl s_client -showcerts -connect example.com:443, и выводится тот же самый материал, который нес BIP70, показанный в PEM, а не в двоичном виде.
Для покупателя биткоина урок состоит в том, чего эти байты не говорят. Действительная цепочка доказывает, что некий удостоверяющий центр проверил контроль над доменным именем на момент выпуска. Она ничего не говорит о том, кому принадлежит компания, является ли страница клоном биржи или сможет ли эта биржа обеспечить вывод средств. Фишинговые сайты несут совершенно действительные сертификаты, полученные бесплатно за секунды, и замок, который они создают, неотличим от настоящего.
Поэтому читайте домен, а не замок. Заходите на биржу по закладке, созданной вами однажды, а не через рекламу в поиске, и воспринимайте предупреждение о сертификате на сайте, где хранятся ваши деньги, как сигнал остановиться, а не как приглашение продолжить.
PP pki data vs цепочка сертификатов
PP pki data было контейнером; в него помещалась цепочка сертификатов. Название pki data имеет смысл только при чтении документации BIP70 или архивного исходного кода кошельков, потому что больше нигде этот термин никогда не использовался. Цепочка, напротив, представляет собой живую вещь, от которой вы зависите ежедневно, а правило упорядочения, записанное в BIP70 (конечный сертификат первым, корневой опущен), до сих пор соблюдается в TLS.