to post messages and comments.

← All posts tagged криптография

@OCTAGRAM:

До чего же пространно указываются схемы подписи запросов на биржах. Во-первых, у каждого свои, во-вторых, постоянно непонятно, как что (де)кодировать, и нужно ли. В Poloniex секрет — очевидно шестнадцатеричная строка, но декодировать её не нужно, а в Cryptopia — очевидно Base64 строка, но декодировать её оказалось нужно. Или sha256 напишут, а потом сиди гадай, это SHA-256 в шестнадцатеричном виде в нижнем регистре или двоично, хотя всё остальное рядом — текст. В Kraken выясняется, что двоично, хотя всё остальное рядом — текст. URL в Kraken — это не то, что вы подумали, а только путь URL, как можно понять, перебрав всякие варианты кодирования/декодирования/некодирования/недекодирования остальных вызывавших сомнения элементов схемы и подсмотрев, наконец, в чужих реализациях.

Увидев в документации Cryptopia такое:
URI: the request uri. e.g. https://www.cryptopia.co.nz/Api/SubmitTradeОбрадовался, подумал, ну хоть что-то написали понятно. Вот, у кого Кракену бы поучиться. И думал я так, пока не запарился пытаться пробиться и не посмотрел опять, как делают другие:
strtolower( urlencode( $uri ) )
Как же вы мне все дороги.

@OCTAGRAM:

Кажется, поймал в живую коллизию. С одной стороны, файл. С другой стороны, папка (хеш от отсортированных хешей файлов). Собрал свидетельства, сделал снимки экрана. По идее, это заодно сведётся и к коллизии для TIGER.

Надо будет независимыми утилитами перепроверить все расчёты. Не врёт ли мне клиент по другую сторону. В ГрейЛинке хеш для папок — устаревшая фича в пользу dcls, я в контекстном меню скачанного списка файлов вижу опции «получить магнитную ссылку» неактивным цветом. Только в поиске по TTH вижу файл и папку вместе.

@OCTAGRAM:

Пытался переписать на Delphi crypt(), которым шифрует пароли ISPConfig у заказчика. Сначала по ссылкам с форума ISPConfig меня кинуло сюда. Взял, переписал на Delphi, только на последнем этапе лень было ещё и модифицированный Base64 делать. Сконвертил в обычный Base64, знак равенства отрезал, а остальные символы заменил по таблице соответствия.

Не сошлось.

Начал вникать глубже в тему. Оказывается, их способ кодирования пароля корнями уходит в /etc/shadow в Linux. Всплыл оригинальный исходник crypt_md5.c. Переписал всё с него. Заодно нашёл ошибку. Я в строках, соответствующих 149 и 150 из первой ссылки, вычислял MD5, а надо только в 150. Строки выглядит похоже, но в 149 MD5 не вычисляется, а там ещё дальше по тексту идёт продолжение. И, присмотревшись, ещё увидел, что модифицированный Base64 берётся от октетов, идущих не подряд, а вперемешку, так что либо нужно тем же образом перемешать, либо переписать на Delphi рабочий код. Переписал.

Не сошлось.

В коде я манипулировал и UTF8String, и TIdBytes, которые суть array of Byte, и постоянно байты перегонял туда и обратно. Думал, ну можь тут накосячил. Сделал отдельную функцию, которая и на вход, и на выход работает со строками. Код стал проще выглядеть, заодно там изолированные экземпляры TIdHashMessageDigest5 теперь используются, а то вдруг я общий экземпляр как–то неправильно использовал.

Не сошлось.

Как на Byte действует shl в Delphi, я уже не уверен, но очень может быть, что значение на выходе так и остаётся Byte, и после shl 16 получается 0, надо бы каждый байт привести к Integer перед тем, как делать shl.

Не сошлось.

Вообще, вряд ли, но вдруг у байтов после расширения размера одновременно с приведением к знаковому численному типу появляется шлейф из единиц в старших разрядах и как–то где–то что–то потом портит. Тем более, в коде по первой ссылке использовался "and $ff". Не зря же, наверное? Надо тоже добавить.

Не сошлось.

Смотрел–смотрел, так и не увидел ошибку. Решил ещё посмотреть разных реализаций. Нашёл независимую для PHP. И бросилось в глаза, что на 103й строке $ctx .= pack("C", 0); Я такой уже один раз видел по первой ссылке, но по второй, откуда я потом переписывал, был j–й байт final, причём, j инициализируется в начале for нулём, а потом не меняется, то есть, это 0, который будет указывать на первый байт в final или password. Я вообще к первой ссылке с недоверием относился после того, как ошибку увидел и переписал по второй ссылке, так что как во второй ссылке, так и у меня был первый байт от final. Это сейчас я разглядел, что строки 149 и 150 отличаются, а тогда ещё нет, и коду по второй ссылке я доверял больше, чем по первой. Но странно, что по третьей так же, как и по первой. Пытаясь понять, почему 0, увидел, что для безопасности по второй ссылке периодически что–нибудь затиралось, но так как мне эта безопасность была не нужна, это я в свой код не переписывал, а там как раз final нулями перезаписывается перед этим циклом, отсюда и 0.

Сошлось. Где–то 5 часов ушло на отладку.

@OCTAGRAM:

Неплохо бы где–нибудь раздобыть ЭЦП токен с неизвлекаемыми ключами с интерфейсом Ethernet, а не USB, чтоб из виртуалок без геморроя работало.

@OCTAGRAM:

New York Times Removes Passage on China From Story on Apple/FBI Encryption Fight
I’ve long wondered why China allows companies like Apple to sell devices without back doors for their government. A big part of why they tolerate it seems to be the fact that no government gets this.
Если Китай прогнёт установку зондов, это будет очень весело. Представляю, как подгорит у постиндустриалистских фундаменталистов.