All streams
Search
Write a publication
Pull to refresh

Comments 44

Интересно на чём у него генератор псевдослучайных чисел основан.

Производители смарткарт/токенов утверждают, что это не псевдо.
Правда подробностей, например, разработчик NXP мне не смог/не захотел рассказать.
Когда я всем этим занимался...

Была у меня книжечка, там был алгоритм генерации псевдослучайной последовательности, как писали - хороший.
А вот сам алгоритм крайне простой, его запросто на МК реализовать, даже примитивном.

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

Насколько помню - там было несколько входящих значений, которые влияли на эту последовательность.
Если бы решал задачу сейчас - можно было бы взять за основу счетчик (что там будет внутри МК - микросекунды, миллисекунды, абстрактные такты), и плясать от них.

Момент начала генерации кода от момента подачи питания - штука довольно случайная, особенно если успело пройти под миллион тактов.
Конечно, если задаться целью, зная код, имея железо, и время для сбора статистики...

Почему те взяли за основы мышку? Ну, так решили.
В Линуксе есть свой /dev/urandom, в Винде тоже вроде что-то подобное...

Вы рассуждаете как программист, которому поставили задачу написать генератор (псевдо)случайных чисел. И в общем совершенно правы, но только в том случае если эти числа будут использоваться НЕ для целей криптографии. Для генерации, например, GUID - вполне себе.

В криптографии же получение случайных чисел это краеугольный камень. И в этом случае оказывается, что последовательность полученная скажем на основе тиков МК не такая уж и случайная. Скажем условная Марьиванна сгенерировала ключевую пару. Мы знаем, что она приходит на работу в 9:00 и включает компьютер, а ключ был сгенерирован до обеда в 13:00 (да хоть бы даже и до конца дня). Значит с высокой долей вероятности мы понимаем, что до момента генерации ключа устройство, на котором он генерировался, отработало от 0 до 4 часов. Если алгоритм генерации последовательности инициализируется количеством тактов (или чем-то подобным), то мы получили диапазон этих значений. Зная сам алгоритм дальше уже дело техники. Конечно упрощённо, но суть ясна.

Поэтому та же Криптопро предпочитает использовать т.н. биологический генератор ибо как там этот кожаный мешок будет двигать мышка 30 сек вещь гораздо менее предсказуемая чем количество тактов МК, прошедших с момента его запуска.

Собственно по этому и стало интересно как это сделано внутри Рутокена. Ведь тут бай дизайн предполагается, что это будет использоваться именно в криптографии, а не в генерации GUID или там розыгрыше очередного Айфона на канале Вилсакома. Вопрос весьма пикантный в силу того, что Рутокен Лайт это крайне примитивное устройство за 3 копейки. Вряд ли там используются какие-то серьёзные аппаратные датчики (которые ниже уже упомянули), на основе электромагнитных возмущений, распада ядра атома, космического излучения или что-то подобного (и это все не прикол).

Подозреваю, что создатели чипа просчитали вероятности математически, а не полагаясь на "здравый смысл".

Поясню: допустим, мы берем за основу тики процессора, параметр А у нас - word от счетчика, параметр В - word от счетчика со сдвигом.
Разумеется, они связаны, общее число вариантов конечно, последовательности для каждого известны и т.д.

По здравому смыслу так и будет: приходит Мариванна в 9, до 13 генерирует ключ, скорее всего в 10:30 (как показали наблюдения за ней)

Но сам счетчик - unsigned long, с периодом обращения, ну скажем, около часа, малейшее отклонение интервала от 9:00 и 10:30 дает расхождения в пределах 65536 вариантов параметра А, * на еще какое-то, меньшее, количество вариантов параметра В. Увеличим частоту - увеличим варианты В.

Опять же, это число конечно, и если последовательности нам известны - можем предугадать.
Но - вероятность этого = 1/ (65536 * тыщи), к тому же от последовательности у нас небольшой кусочек, генерируется она вообще однократно (ну ладно, раз в квартал) - в общем, всё плохо с подбором.

А вот движение мыши - в теории непредсказуемо, но оно тоже ограничено параметрами экрана, т.е. количество вариантов конечно, и скорее всего из всего их массива будет только "влево-вправо по дуге несколько раз".

Остается только рассчитать вероятности предсказания того и другого - подозреваю, что они будут примерно одинаковы, если вообще не в пользу "мыши".

Но это только предположение

Я тоже не настоящий криптограф ) Но думаю, что нам только КАЖЕТСЯ, что в таком подходе вероятность достаточная. Примерно тоже самое, что я сейчас писал в соседнем комментарии про антенну и АЦП. Т.е. с бытовой точки зрения это действительно будет случайное число достаточное для любых "бытовых" нужд. Но вот математик с нами наверное не согласится. Поэтому как раз при отсутствии надёжного генератора предпочтение отдаётся кожаному мешку с мышкой. Получается, что несмотря на то, что кожаный мешок скорее всего подвигает мышку вправо-влево (хотя лично я всегда двигаю как можно более заковырестей) но накладывая на это разрешающую способность сенсора мышки получается результат надёжней чем на тактах процессора.

Даже если счётчик у Вас 32-битный и даже если он вообще не предсказуемый (то есть мы вообще не знаем когда включился МК и когда была выполнена генерация), то просто полный перебор счётчика — это 1-10 часов на средненьком компе. Вообще не годиться.

Для целей криптографии хочется иметь хотя бы 100 бит данных. От источника времени Вы столько данных не получите.

А вот движение мыши - в теории непредсказуемо, но оно тоже ограничено параметрами экрана, т.е. количество вариантов конечно, и скорее всего из всего их массива будет только "влево-вправо по дуге несколько раз".

Берут не движения мыши, а младшие биты её координат. Т.е. даже если Вы будете водить просто вверх-вниз, длина у этих движений будет плавать. Вот из этого плавающего шума и извлекают энтропию

Вряд ли там используются какие-то серьёзные аппаратные датчики (которые ниже уже упомянули), на основе электромагнитных возмущений, распада ядра атома, космического излучения или что-то подобного (и это все не прикол).

Интересно, а просто сделать антенну на печатной плате и скормить то, что она напринимала в АЦП чипа - сильно проблемно c точки зрения отсутствия нужной случайности? Или датчик вибрации (чем шумнее, тем лучше) поставить. Я, возможно, ошибаюсь, но с современными ширпотребовскими чипами 'за 3 копейки' тут даже особо стараться не нужно - нужные блоки в нем уже почти наверняка будут.

Антенна на АЦП - плохо. На самом деле это весьма забавно, но такой эксперимент может проделать большинство (я надеюсь) обитателей Хабра (я проделывал).

Берём банально Ардуино, вешаем на ногу АЦП отрезок провода, читаем получившиеся значения. Убеждаемся, что мы получаем хаотические (на первый взгляд) значения в диапазоне 0..255 (если правильно помню АЦП там 8-и битный, давно дело было). Теперь читаем значения с АЦП в цикле и выводим на график x=время, y=значение. Убеждаемся, что мы получили что-то подозрительно напоминающее синусоиду с частотой 50 Гц. Что бы это могло быть? :)

Мораль этого всего такова, что многие процессы с житейской точки зрения весьма похожи на хаотические. Однако при применении к ним математики оказывается, что до настоящей случайности там ооойй как далеко. И серьёзная криптография относится к этому вопросу очень серьёзно. Можно наверно даже сказать, что она на этом буквально основана.

Берём банально Ардуино, вешаем на ногу АЦП отрезок провода, читаем получившиеся значения.

Так я не про кусок провода а про нормально рассчитанную антенну, которая будет ловить и усиливать что-нибудь интересное.

Убеждаемся, что мы получили что-то подозрительно напоминающее синусоиду с частотой 50 Гц. Что бы это могло быть? :)

Я подозреваю, что даже так будет все-таки шумная синусоида, а нам это и надо.

Предположим у нас АЦП 10 бит. Берём младшие 4 (биты 0 - 3). А биты 2-5 используем для джиттера (при этом проверяем что входной сигнал имеет размах гарантирующий кратное переполнение (например не менее 8 бит). Получаем экспоненциальное расхождение погрешности. Скипаем для надёжности первые несколько десятков бит. Так можно достаточно быстро насобирать например сотни бит, что уже серьезно. Даже если пару бит "выпадут" из ключа 512 бит, это обычно не фатально.

Есть еще методика повышения разрядности АЦП сложением с периодическим сигналом с одновременным усреднением. Убрав из неё усреднение мы можем более эффективно извлекать шум из сигнала.

Вообще нехитрой схемой можно получить практически чистый дробовой шум полупроводника. Тут и антенна не нужна, и, более того, при грамотном дизайне оно будет почти невосприимчиво к внешним воздействиям. Усиливаем до тех же 10 бит добавляя шум усилителя и берём только младший бит. Получаем случайность практически уровня радиоактивного распада.

PS
Напомнило

И вот так мы выяснили, что если не надо сертифицироваться в ФСБ, то все что требуется для генерации адекватных случайных чисел - это добавить на плату микросхему усилителя попаршивее стоимость рубль/мешок.

Там ниже кидали примеры аппаратных решений в виде карт расширения за много денег (на самом деле не так много, но всё равно минимум на порядок дороже чем стоит Рутокен Лайт), где одна из функций видимо это получение случайных чисел.

Вероятно, что внутри там что-то такое и реализовано. А значительная часть цены это всевозможные сертификации.

Но первоначальный-то вопрос был - как это реализовано в Рутокен Лайт да ещё за 3 копейки. И ведь он тоже имеет какой-то сертификат при этом (вопрос только на что он сертифицирован, но читать честно лень). Я просто всю жизнь полагал, что это "флэшка с паролем" и немного удивился узнав, что там ещё есть аппаратный генератор чисел.

Подытожить дискуссию можно наверное тем, что накидали варианты как оно может быть реализовано, но доподлинно никто из присутствующих не знает.

Разложить в фурье и понизить коэффициенты у известных частот. Впрочем если уже фурье сворачивать в нужный диапазон значений хотя бы тем же xor, то никаких проблем я придумать не могу.

Всегда было интересно, если записать движения мышкой и воспроизвести, будет ли идентичный ключ?

Ну это только авторы программы ответить могут точно. Но если бы делал я, то я бы добавил ещё каких-нибудь данных.

если успело пройти под миллион тактов.

Если вы в качестве основы берёте количество тактов от нуля до миллиона, то какой- бы вы статический алгоритм к нему не применили - у вас все равно максимум миллион вариантов. Это вообще ни о чём.

Вообще для этого используются аппаратные датчики. По крайней мере так требуют регуляторы (ФСБ) по отечественной криптографии (СКЗИ).

Broadcom SSL Crypto Accelerator Card BCM95821/22/SSN 110042-30
ПАК Соболь

Можно с помощью того-же СКЗИ КриптоПро и ПАК Соболь "намайнить" кучу случайных чисел, сохранить их в файл и потом использовать.

"намайнить" кучу случайных чисел, сохранить их в файл и потом использовать

Напомнило

то что это аппаратные это понятно.
А вот КАК конретно сделан этой информации я не смог найти. На каких принципах и подробности.
Ну когда меня этот вопрос заинтересовал (когда то).

Чип в смарт карте это не бог весть что.. небольшой ОЗУ (максимум 4Кб) и частота тактовая обычно в районе 16Мгц.

На " подвигайте мышкой"

Пользователь рандомно двигает курсор по экрану в течение секунд 30

не, это программа такое делает. Ключ выдает мгновенно.

все эти токены это исторически smartcard+usb ридер в одной упаковке.
pcsc - это стандарт работы с SmartCard ридером.

У GemAlto, например, был переходной вариант USB ридер в формате "флешки" в котором можно было отщелкнув крышечку вставить/заменить карту (обрезанная до контактной площадки как SIM карта.

Где то в районе 2008..2009 (могу ошибаться в датах. лень копать/вспоминать) стандарт работы через APDU с приложением на смарт картах стал более менее стандартизированным и подогнаным под PKCS#11.

Можно использовать при шифровании на токене, но невозможно извлечь и скопировать, никому.

А какие токены выдаёт налоговая? Формально в них некопируемые сертификаты. По факту скопировать можно, если знать как.

Бывают не экспортируемые, и не извлекаемые. Налоговая делает не экспортируемые. Их да, вытащить можно. Не извлекаемые - я не нашел решения.

Либо Rutoken Lite или S, если физлицо (копируемые - там только пароль хранить), либо Rutoken ЭЦП - некопируемые сертификаты генерируются на ключе, либо Jacarta (там вроде тоже и такой и такой варианты есть).

Остальное несертифицированное, и официально нельзя использовать.

Можно просто принести свой, купленный отдельно - сертифицированный, конечно.

Никакие она не выдаёт, сам покупаешь и приходишь с ним. Взял простой (rutoken lite) – получи сертификат в формате богомерзкого КриптоПро, взял сложный (rutoken ecp)– можешь заказать в формате pkcs#11, неизвлекаемый (мне кажется разумным).

Ну и где-то (например, ЕГАИС) – только сложный.

Видимо, где как. В нашей районной могут продать на месте, или можно купить буквально за углом в вендинговом автомате, или заказать на маркетплейсе и придти с ним...

За углом – да, и в Питере так же. Только сильно дороже, чем на маркетплейсе. Но кто не купил заранее – бегают и покупают, чтоб время не терять.

взял сложный (rutoken ecp)– можешь заказать в формате pkcs#11, неизвлекаемый (мне кажется разумным).

Мне вот наоборот - не кажется. Я готов брать на себя ответственность за безопасное хранение своих ключей ЭЦП, но совершенно не готов поставить критически важные процессы в зависимость от утери/кражи/изъятия/повреждения одного конкретного материального носителя, оперативно восстановить который не всегда возможно (начиная от физического нахождения руководителя вдали от родины, заканчивая всяческими корпоративными спорами, наложенными ограничениями и т.п.) Так что возможность записать ключ на Rutoken Lite, который копируется общеизвестными способами, хоть как-то спасает.

Дело ваше. В норме это решается более чем одним токеном, а вот связка rutoken lite + crypto pro у меня симпатии не вызывает. Ну не нравится мне сама идея загружать ключ в память и делать с ним что-то – тогда можно и без свистка вообще обойтись, обычной флешкой. Или, как это сейчас принято, приложением на смартфоне.

Плюс rutoken эцп позволяет многие операции выполнять без криптопро – э это, скажу вам, большое улучшение. Этот монстр Франкенштейна, расползающийся по системе и не работающий ни на чём, кроме винды – веский довод для поиска альтернатив. Какой та Макс? Вот где ужас.

А как в ФНС записать ключ ЭЦП на более чем один токен?.. Что-то я такой опции не увидел.

Вообще я токен использую только один раз - чтобы скопировать ключ с него в реестр виртуальной машины, специально выделенной для работы с госпорталами, КриптоПро и прочими не внушающими доверия штуками. А дальше уже контролирую доступ к этой виртуалке и делаю её бекапы.

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

Ключ более чем на один токен – нельзя, и это нормально. Правильное решение – несколько ключей.

Правильное решение – несколько ключей.

Только гуглеж показывает, что в обсуждаемом контексте оно вроде бы запрещено. При создании нового ключа старый отзывается.

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

Кстати, я вот только сегодня выяснил, что оказывается теперь для работы с тем же Рутокеном ЭЦП и госпорталами (по крайней мере налоговой) никакой Криптопро больше не нужен.

Мало того, что оно теперь работает "из браузера", мало того, что поддерживается Линукс, так ещё и архитектура arm поддерживается.

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

Хоть что-то хорошее.

А можно подробности, ссылку или что еще почитать? А то эта "забава" с установкой северного Крито Про на каждый терминал изрядно достала...

Сейчас по памяти, потому что компа под рукой нет, но было так:

Заходим на сайт налоговой, ЛК ЮЛ, выбираем там вход через Rutoken ЭЦП, там у них входная страница сама проверяет что надо.

Сначала хочет установить что-то типа Рутокен Плагин для браузера, со второго захода - ответную часть, бинарник к нему. Там плагин с этим бинарником работает. Бинарник качается с сайта Рутокена - ссылочку они дадут. Deb-файл, распаковка, установка вручную или dpkg -i

Потом по той же схеме ещё один плагин, типа Рутокен Адаптер, и к нему ещё один бинарник.

А потом оно работает с Рутокен ЭЦП из линукса без винды, как я и говорил. ( Не Lite ) Но это на рабочей станции, где браузер (или через rdp/x/vnc)

Насколько я понял схему работы - при желании можно извратиться и заставить плагины работать с бинарниками через сеть, например поставив их на сервере - но это надо немного реверс инжиниринга.

что интересно за денюжку тот же Тензор - дает обычные, экспортируемые (а следовательно менее защищенные от "слива")

На сколько помню, у продвинутых токенов была опция вроде FIPS, не позволявшая штатными средствами больше ничего сделать с заблокированным токеном, в том числе полный сброс.

От утери/порчи токена можно защититься например наличием нескольких токенов, с одинаковым содержимым, например.

запоминающийся пароль, даже в стиле известного "девятнадцать обезьян ..."

С запоминаемостью у него не очень: ведь обезьян было не 19...

Вот именно! )

Однако, пароль вы вспомнили, я вижу...

Sign up to leave a comment.

Articles