?

Log in

No account? Create an account
Cat-light

klink0v


Блохи в свитере деда Сергеича


Half-life? Не, не слышал
Cat-light
klink0v

Цените новость: http://www.svobodanews.ru/content/article/24636144.html

Самый зачётный кусок оттуда, цитирую дословно:

Период полураспада полония составляет 138 дней, период полного распада, соответственно, 276 дней, после чего полоний превращается в свинец.

Даже не знаю что и сказать... Разве что только "аффтар жжот!"

Ссылку на этот идиотизм подглядел у кошки.


Понравилось платье
Cat-light
klink0v

Кто только не ездит в электричках. И что только на них не бывает надето... В этот раз увидел на случайной пассажирке вот такое платье "из лепестков". Странно, но оно мне почему-то очень понравилось. Фотка кликабельна.

Я даже подумал, что неплохо бы сделать эти отвисающие лоскуты не из ткани, а из какой-нибудь папиросной бумаги. Да, неудобно: уже не постираешь. Одёжка получится одноразовой. Но зато как прикольно всё это шуршало бы на ветру!


Популярно о криптографии, часть 4
Cat-light
klink0v

Третья часть здесь.

В этот раз немного про техническую реализацию всего этого криптографического безобразия. Но сперва вкратце напомню о чём вообще идет речь.

Задача заключается в том, чтобы передать данные так, чтобы их не смог бы прочитать тот, кому они не предназначены (по крайней мере, в ближайшие 100 лет). Мы можем их зашифровать, но нужно как-то передать ключ. Чтобы передать ключ, мы можем воспользоваться услугами несимметричных криптоалгоритмов, но при этом надо как-то убедиться в том, что открытый ключ был получен нами действительно от того, от кого мы думаем. Как мы уже упоминали во второй части, для решения этой задачи на данный момент времени используется один из двух подходов: PGP со своим Web of Trust и X.509.

В первом случаё всё относительно просто. Устанавливаем на свой компьютер программу под названием Gnu Privacy Guard, генерируем для себя набор ключей (открытый, закрытый). Открытый рассылаем всем желающим, закрытый бдительно храним в тайне. Если нужно кому-то передать приватное сообщение, просим у него открытый ключ и шифруем им послание. Проще всего это делать при помощи плагина к Thunderbird под названием Enigmail. Подробная инструкция с картинками есть здесь. Она, правда, довольно старая, но с тех пор мало что принципиально изменилось.

В случае с PGP/GPG решение "доверять открытому ключу или нет" лежит исключительно на нашей совести. Косвенно можно подтвердить подлинность ключа если он был получен из авторитетных источников, но 100%-й гарантии, понятно, никто не даёт.

В случае с X.509 всё намного сложнее и намного замороченнее (промышленный стандарт, фигли). Для того чтобы лучше понять откуда "ноги растут", неплохо бы начать с начала.

Что вообще из себя представляют пресловутые "открытый ключ" и "закрытый ключ" применительно к IT? На самом деле это всего-навсего два числа. Два числа в открытом ключе и два числа в закрытом ключе. Вот ради них весь огород и городят. Здесь и далее я подразумеваю алгоритм RSA; с ГОСТ-ом ситуация немного иная, но похожая.

Итак, некто Вася хочет передать нам приватное сообщение. Сперва он должен сгенерировать случайным образом те самые пресловутые пары чисел. Каким способом он может это сделать? Есть разные способы. Один из них — воспользоваться пакетом программ и/или библиотек OpenSSL. Слово "Open" означает, что программы имеют открытый исходный код; каждый желающий может посмотреть как работает алгоритм, что там внутри. Второй вариант — вызвать встроенные в Microsoft Windows функции из комлекта CryptoAPI, которые входят в состав того или иного криптопровайдера. Но в этом случае придется "поверить на слово" программистам из Microsoft: проверить наличие/отсутствие багов, возможных лазеек и "качество" закрытого кода мы уже не сможем, это некий "чёрный ящик".

Сгенерировали числа. Что дальше? Те которые секретные, понятно, оставляем себе. Что делать с публичными? А к публичным мы будем прилеплять всякую информацию о себе родимом. Да не просто прилеплять, а по особой форме. Во времена, когда разрабатывали X.509, об XML ещё никто ничего не знал. Поэтому в очередной раз изобрели велосипед придумали специальный формат: ASN.1. Вот в этом формате составляется своебразная "анкета" по "утврержденной форме".

То есть Вася берёт типа как бланк и начинает заполнять его "автобиографической" информацей о себе: что он Вася, фамилия Пупкин, работает в компании ЛомаемМоторы и так далее. А в конце бланка предусмотрены поля для записи тех самых двух чисел, пресловутого открытого ключа. Потом Вася вычисляет от всей анкеты так называемый "дайджест" (хеш), подписывает его своим закрытым ключом и вписывает в последнее поле бланка. Получившаяся шняга называется "запрос на сертификат", сокращённо CSR (certificate signing request).

Дальше этот запрос надо подписать. Если Вася возьмет и подпишет этот сертификат сам, то это будет так называемый "самоподписанный сертификат" (подпись: К.О.). Но толку от него будет не очень много: ведь подлинность Васиного самоподписанного сертификата никто кроме самого Васи не подтвердит. Поэтому ему придется с флешкой приезжать к вам (к нам) и привозить этот сертификат лично, в противном случае мы не можем ему (сертификату) доверять. А если нет возможности приехать с флешкой?

Тогда придется идти на поклон к какому-нибудь авторизованному центру сертификации (ака "пахану") и платить ему деньги. Сертификат для личной S/MIME переписки можно попросить и нахаляву у какого-нибудь Комода или иже с ними, но вот для коммерческого применения раскошелиться придется в любом случае. В России одним из самых дешевых центров сертификации является, пожалуй, RBC.

Центр сертификации поглядит что там Вася понасочинял в своей анкете (CSR) и даже попытается сравнить с тем что есть на самом деле. Может даже позвонить Васе по телефону и/или назначить очную ставку. После этого, если ему (пахану) всё понравится, он подпишет Васин запрос. То есть, в свою очередь посчитает дайджест (хеш), зашифрует его своим собственным закрытым ключом и приложит его к запросу. То что получится, отдаст обратно Васе. Вот это нечто и будет Васиным сертификатом.

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

Что же представляет собой сертификат? А это бинарник (бинарный файл). При этом так исторически сложилось, что OpenSSL и прочий OpenSource-софт его до кучи кодирует в Base64 и сохраняет его в виде текста. А винда и виндовые приложения оставляют "как есть", в двоичном виде. Так разгорелась своеобразная "война форматов". К чести разработчиков открытого софта, последние версии OpenSSL умеют конвертировать сертификаты из "виндового" формата в "линуксовый" и наоборот. А вот встроенными средствами Windows можно генерировать/подписывать только в DER-формате. И вообще, в продуктах Microsoft разброд и шатание в способах хранения сертификатов намного серьезнее. Можно посмотреть, например, тут. По сути, это всё один и тот же DER, только поданный под разными соусами.

Как поглядеть что находится внутри сертификата? Если в Windows, то просто кликнуть по файлу два раза мышкой. Появится окошко с информацией типа того:

Сверху будет написано "где родился", "на ком женился" и так далее. Если хочется узреть всё то же самое под Linux или с использованием OpenSSL, то необходимо выполнить следующую команду:

openssl x509 -in cert.crt -noout -text

В результате на выходе будет что-то типа того:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            34:75:3a:52:c0:83:70:b2:43:ed:0c:3e:d3:2a:b2:46
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: O=WebMoney Transfer, OU=WebMoney Certification Center, CN=WebMoney Transfer Root Authority
        Validity
            Not Before: Apr  4 13:47:09 2001 GMT
            Not After : Jun  7 19:47:18 2010 GMT
        Subject: O=WebMoney Transfer, OU=WebMoney Certification Center, CN=WebMoney Transfer Root Authority
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:ef:55:d1:16:2b:25:83:c2:39:1e:e8:76:2c:88:
                    09:63:6e:a1:98:f4:b4:df:59:d6:66:35:d2:cf:90:
                    21:81:ac:31:90:8d:1b:49:9e:43:29:ad:e6:34:ee:
                    84:3f:c4:18:d0:07:55:54:7d:b2:dd:c2:f7:6a:6a:
                    cb:65:00:bd:0c:80:c4:c9:b3:83:94:89:6e:ea:3f:
                    df:d6:12:02:ac:74:bc:4b:5e:86:5e:10:7c:75:87:
                    4a:21:52:b5:b6:ed:66:c9:47:76:5d:63:60:a2:f0:
                    9b:a0:7c:f1:72:37:3a:98:80:a0:c0:1c:72:7b:52:
                    6b:3b:e2:9b:59:35:f2:56:76:6e:c4:c9:7a:21:f8:
                    b3:c0:4b:3f:94:f4:63:0f:91:6d:e9:47:68:97:b5:
                    0e:24:56:0a:1a:0a:aa:85:6a:b0:3a:79:98:7e:ef:
                    d1:c1:29:0f:bf:0a:96:d1:e8:e7:bc:d4:b8:7f:ab:
                    cd:37:13:78:22:a4:3b:8f:fd:09:68:85:a9:8d:85:
                    cc:2d:3d:c1:e9:05:27:c2:d9:d0:73:25:70:03:5d:
                    2d:84:af:9b:3d:d4:c7:70:6f:16:ac:bc:27:2b:7c:
                    74:18:6a:f0:c4:54:93:36:42:f0:28:39:fe:57:ec:
                    65:23:07:1e:ca:f5:3e:7b:08:b8:cd:0e:19:b6:f5:
                    18:93
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                CB:9D:7E:51:7E:08:20:C4:F5:70:94:A1:CE:52:C7:05:4D:3F:33:F3
            X509v3 CRL Distribution Points:
                URI:http://www.wmcert.com/CertEnroll/WebMoney%20Transfer%20Root%20Authority.crl

            1.3.6.1.4.1.311.21.1:
                ...
    Signature Algorithm: sha1WithRSAEncryption
        6a:1b:2b:f9:15:5a:55:e0:c2:b4:55:85:cf:16:a5:21:b3:25:
        5c:48:3a:8c:fa:1b:b8:53:43:80:d1:c2:0a:1c:e5:d1:57:a0:
        5c:6c:3c:ec:36:2d:7e:e8:75:40:da:fa:fd:3c:87:08:55:34:
        65:19:77:14:f7:92:5c:41:ed:ed:8d:b5:d0:34:d3:29:29:c8:
        0b:d1:83:16:d2:27:cc:03:6a:ae:e7:2e:a7:25:32:2e:ee:b2:
        82:11:25:2d:b0:cc:d0:52:77:1c:69:79:98:9f:40:c2:85:8b:
        af:3c:e6:db:e6:cb:9f:45:59:6c:1c:bf:46:73:dd:1e:46:24:
        7c:96:87:da:0e:a2:0c:f3:6b:c4:4e:c4:04:22:3d:4c:d6:27:
        d4:80:3e:4b:c5:9b:b0:43:c7:dd:11:26:7f:18:79:31:0a:8b:
        1a:f5:81:bb:59:92:93:30:48:0f:49:7a:4b:99:df:b2:db:83:
        64:94:c8:bd:71:bf:b4:74:97:1e:f3:83:a0:31:47:c5:03:16:
        0e:ef:59:64:73:47:49:e4:1e:d3:26:ca:92:62:6c:27:8f:4c:
        78:c3:7d:80:bf:74:e2:10:93:90:32:08:40:25:5b:1d:3c:98:
        84:cd:48:87:31:50:ec:01:bc:97:43:4d:e0:64:8c:9e:c4:5a:
        65:e1:00:f2

Те же яйца, вид сбоку. Пресловутый открытый ключ хранится в полях "Modulus" и "Exponent" (выделил жирным). Подпись — это все что идет после слов "Signature Algorithm", за выдачу этих волшебных циферек как раз и стрижет купоны центр сертификации (Certificate Authority, CA). Еще важным полем является серийный номер (Serial Number). Двух разных сертификатов с одинаковым серийником, подписанных одним и тем же центром, в природе существовать не может. А если и может, то это серьезный глюк, за который отрывают руки. А все остальные поля — это просто "бла-бла", которые говорят что Вася — это Вася, что фамилия его Пупкин и так далее.

Чем же так хороши "официально подписанные" сертификаты и чем они плохи? Хороши тем, что ни одна программа, ни один почтовый клиент и ни один браузер не будут материться, получив от сервера такой сертификат. Они автоматически сверят его с тем, что уже имеется на компьютере: корневые сертификаты (Root CA) записываются на жесткий диск в момент установки операционной системы и распространяются в комплекте с последней. А сверив, можно больше не сомневаться: Вася — это Вася. И открытый ключ принадлежит ему и только ему. Плохи же они тем, что за них нужно платить деньги. При этом они имеют ограниченный "срок годности" и сферу применения: выпущенный для веб-сервера сертификат обычно не годится для подписи программного кода и наоборот. Да и по договору с центром сертификации, как правило, можно использовать один сертификат только на одном компьютере или сервере. Поэтому многие часто жмотят бабло (причем, вполне обоснованно) и используют самоподписанные сертификаты. Но тут уж хозяин — барин.