Comments: |
Нифига не снимается. Проблема как раз в том, что нехороший человек может написать в сертификате ВСЕ, ЧТО УГОДНО, и это все-что угодно, будет заверено валидной электронной подписью УЦ.
Юзер там увидит не кучу левых букв. Он увидит вполне правые буквы
CommonName=www.paypal.com Organization=PayPal Inc.
В то время как УЦ подписывал сертификат с CommonName=pupkin.narod.ru Organization=ПБОЮЛ Вася Пупкин
> Юзер там увидит не кучу левых букв.
а каким же святым духом возникнет воздействие на хэш функцию? у неё случайно открылся второй аргумент?
Открылся алгоритм получения коллизий. Который позволяет взять два разных текста и подописывать к ним в хвост дополнительные байты, чтобы получилась одинаковая хэш-функция. При этом эти дополнительные байты это не просто так - а вполне валидные открытые ключи RSA.
> подописывать к ним в хвост дополнительные байты
а теперь вернитесь на два комента выше и прочитайте мои слова: "юзер увидит левые символы"
s/левые/дополнительные/ s/символы/байты/
Надо дочитывать до конца то, что я пишу. (может если до конца дочитывать и на фишинг попадаться не будешь)
В любом сертификате есть 32 или 64 байта нечеловекочитаемых символов. Открытый ключ называются.
Коллизия строится подбором таких двух ключевых пар RSA, что открытый ключ А вместе с текстом X дает ту же хэш-сумму, что открытый ключ B вместе с текстом У. (ну на самом деле не текстом, а ASN.1 структурой данных сертификата, но это не важно).
Злоумышленник имеет в своем распоряжении закрытые ключи от обоих ключевых пар, поэтому может послать в УЦ заявку с текстом X и открытым ключом A, честно подписав ее закрытым ключом A.
Получив сертификат, он отрезает от него подпись, подцепляет его к паре из текста Y и открытого ключа B и получает сертификат на ключевую пару B. Закрытый ключ B у него есть, так что он вполне может доказать клиенту TLS что он Y.
From: | silly_sad |
Date: | March 25th, 2010 - 11:55 am |
---|
| | верно ли я понял схему? | (Link) |
|
(A,kA),(B,kB) -- key pairs of a fisher (C,kC) -- key pair of a CA X,Y -- some certificate text
sign :: Text->Privkey->Signature
check :: Text->Signature->Pubkey->Boolean
fisher --> CA : ((X,A) , sign (X,A) kA)
fisher <-- CA : ( ((X,A) , sign (X,A) kA) , sign ((X,A) , sign (X,A) kA) kC )
fisher --> User : ( ((Y,B) , sign (Y,B) kB) , sign ((X,A) , sign (X,A) kA) kC )
WHERE
check ((Y,B) , sign (Y,B) kB) (sign ((X,A) , sign (X,A) kA) kC) C == true
| |