В предыдущей части статьи был разобран общий принцип работы системы: мы увидели, что двумя основными её блоками являются интерполятор и нумератор. Мы построили схему взаимодействия, а также полностью обсудили реализацию интерполятора. В этой части мы разберём реализацию нумератора: обратимой функции, переводящей набор значений ключевых полей в натуральное число (BigInteger) таким образом, что набор меньше набора с точки зрения СУБД тогда и только тогда, когда . Говоря проще — научимся интерполировать наборы значений и, что самое интересное, строки:
Антон @Coriolis
Программист
Наш опыт использования фотограмметрии при разработке компьютерной игры (Часть 1)
6 мин
30KВ данной статье будет рассказано о фотограмметрии и опыте её использовании при создании контента для трёхмерной компьютерной игры во вселенной Half-Life, разработкой которой мы занимаемся уже не первый год.
+48
Что несут свежие изменения в 63-ФЗ «об электронной подписи»
4 мин
37K23 декабря 2015 года Государственной думой в 3м чтении был принят проект ФЗ-445 об изменении в 63-ФЗ «об электронной подписи». Так как многие коллеги еще не знакомы с этим законом, хотелось бы донести и рассказать чего коснутся изменения и как он повлияет на развитие единого пространства доверия в Российской Федерации. Но обо всем по порядку.
До настоящего момента, каждый удостоверяющий центр (далее УЦ), после прохождения аккредитации САМ выпускал себе ключевую пару (открытый и закрытый ключи УЦ) и сертификат проверки ключа электронной подписи (далее сертификат). Основной особенностью сертификата было то, что он был выпущен самим УЦ и подписан его подписью (такой вариант сертификата называется «самоподписанный»). Далее этот сертификат предоставлялся оператору Головного удостоверяющего центра Российской федерации (далее ГУЦ), где, данный самоподписанный сертификат включался в доверенные и ГУЦ публиковался на портале ГУЦ как доверенный.
В итоге такой схемы взаимодействия УЦ с ГУЦ мы получали изоляцию пространств доверия каждого отдельного УЦ, так как все операционные системы и прикладное ПО проводят проверку сертификата ключа по цепочке сертификации, до тех пор, пока издатель сертификата не совпадет с владельцем сертификата. Таким образом получалась картина, что для того чтобы два пользователя с сертификатами двух разных УЦ доверяли друг другу, им было необходимо добавить сертификаты УЦ друг друга в доверенные. Тут специалисты мне вежливо укажут на кросс-сертификаты между УЦ, но я уверенно отвечу – это костыли, и объясню почему: Представьте, что вы в сети интернет и вы ходите от одного узла сети к другому, каждый из которых использует сертификат своего УЦ. Тогда, для обеспечения доверия всем узлам (они и правда доверенные) вам придётся иметь у себя локально сертификаты всех УЦ в Российской Федерации. Более того, вам придётся их самостоятельно поддерживать в актуальном состоянии. Оно вам надо?
До настоящего момента, каждый удостоверяющий центр (далее УЦ), после прохождения аккредитации САМ выпускал себе ключевую пару (открытый и закрытый ключи УЦ) и сертификат проверки ключа электронной подписи (далее сертификат). Основной особенностью сертификата было то, что он был выпущен самим УЦ и подписан его подписью (такой вариант сертификата называется «самоподписанный»). Далее этот сертификат предоставлялся оператору Головного удостоверяющего центра Российской федерации (далее ГУЦ), где, данный самоподписанный сертификат включался в доверенные и ГУЦ публиковался на портале ГУЦ как доверенный.
В итоге такой схемы взаимодействия УЦ с ГУЦ мы получали изоляцию пространств доверия каждого отдельного УЦ, так как все операционные системы и прикладное ПО проводят проверку сертификата ключа по цепочке сертификации, до тех пор, пока издатель сертификата не совпадет с владельцем сертификата. Таким образом получалась картина, что для того чтобы два пользователя с сертификатами двух разных УЦ доверяли друг другу, им было необходимо добавить сертификаты УЦ друг друга в доверенные. Тут специалисты мне вежливо укажут на кросс-сертификаты между УЦ, но я уверенно отвечу – это костыли, и объясню почему: Представьте, что вы в сети интернет и вы ходите от одного узла сети к другому, каждый из которых использует сертификат своего УЦ. Тогда, для обеспечения доверия всем узлам (они и правда доверенные) вам придётся иметь у себя локально сертификаты всех УЦ в Российской Федерации. Более того, вам придётся их самостоятельно поддерживать в актуальном состоянии. Оно вам надо?
+32
Читаем контейнер закрытого ключа КриптоПро средствами OpenSSL
8 мин
86KРечь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.
Стоит упомянуть о существовании утилиты P12FromGostCSP которая позволяет конвертировать ключ в формат P12, доступный для работы с OpenSSL, но утилита имеет следующие существенные недостатки:
Содержит 32 байта ключа в формате Asn1. Это только половина ключа, полный ключ получается при делении этого числа по модулю Q на маску. Поле, хранящее модуль Q в библиотеке OpenSSL имеет название order. Маска лежит в файле masks.key:
Стоит упомянуть о существовании утилиты P12FromGostCSP которая позволяет конвертировать ключ в формат P12, доступный для работы с OpenSSL, но утилита имеет следующие существенные недостатки:
- Читает контейнер не напрямую, а через криптопровайдер, поэтому там, где кроме OpenSSL ничего нет, не работает.
- Если в свойствах ключа не отмечено, что ключ «экспортируемый», то конвертировать его невозможно.
- В демо версии не формирует файл с ключом, эта возможность присутствует только в платной версии.
Файл primary.key
Содержит 32 байта ключа в формате Asn1. Это только половина ключа, полный ключ получается при делении этого числа по модулю Q на маску. Поле, хранящее модуль Q в библиотеке OpenSSL имеет название order. Маска лежит в файле masks.key:
+54
Open-source реализации отечественных криптоГОСТов
2 мин
61KНа выходных решил поискать open-source реализации отечественных криптографических стандартов. Прежде всего интересовали новые: хэш-функция Стрибог (ГОСТ Р 34.11-2012), Кузнечик (ГОСТ Р 34.12-2015) и ЭЦП (ГОСТ Р 34.10-2012 или 2001 (без 512-бит) ). Старый ГОСТ 28147-89 специально не искал, поскольку найти его реализацию никаких проблем нет уже давно.
Итак, давайте посмотрим, что же получилось. Сразу предупреждаю, что корректность реализаций не проверял.
Итак, давайте посмотрим, что же получилось. Сразу предупреждаю, что корректность реализаций не проверял.
+17
Сравнение сервисов приема интернет-платежей для ИП
8 мин
86KРанее я опубликовал две статьи (1, 2) о способах приема платежей на сайте. В предыдущих статьях было одно условие — подключение к платежным системам производилось как физическое лицо. Теперь я решил выйти из сумрака делать все максимально честно, и хочу рассказать о способах подключения к платежным системам в качестве ИП и легального вывода заработанного на расчетный счет в банке.
К сожалению, процесс подключения к платежным системам в качестве ИП всегда омрачен тем фактом, что для вывода денег (а иногда и просто для того, чтобы зайти в личный кабинет) нужно подписать договор и подождать, пока он дойдет в бумажном виде до платежной системы, поэтому в этой статье в большинстве случаев я буду описывать только теоретическую и информационную части сотрудничества с платежными системами и агрегаторами.
В общем случае, чтобы подключить прием платежей, нужно обменяться договором с платежной системой, так что на быстрое подключение рассчитывать не приходиться. Плюс — этот договор должны вручную обработать, так что если не учитывать время, затраченное на пересылку документов Почтой России, то подключение занимает от трех дней. Пакет документов у всех примерно одинаковый, но иногда может потребоваться заверенная у нотариуса копия какого-то документа или, например, свежая выписка из ЕГРИПа.
Итак, герои сегодняшнего обзора: WebMoney, Яндекс.Касса, PayPal, Единая Касса (Wallet One), RBKMoney, PayMaster, РобоКасса, QIWI
К сожалению, процесс подключения к платежным системам в качестве ИП всегда омрачен тем фактом, что для вывода денег (а иногда и просто для того, чтобы зайти в личный кабинет) нужно подписать договор и подождать, пока он дойдет в бумажном виде до платежной системы, поэтому в этой статье в большинстве случаев я буду описывать только теоретическую и информационную части сотрудничества с платежными системами и агрегаторами.
В общем случае, чтобы подключить прием платежей, нужно обменяться договором с платежной системой, так что на быстрое подключение рассчитывать не приходиться. Плюс — этот договор должны вручную обработать, так что если не учитывать время, затраченное на пересылку документов Почтой России, то подключение занимает от трех дней. Пакет документов у всех примерно одинаковый, но иногда может потребоваться заверенная у нотариуса копия какого-то документа или, например, свежая выписка из ЕГРИПа.
Итак, герои сегодняшнего обзора: WebMoney, Яндекс.Касса, PayPal, Единая Касса (Wallet One), RBKMoney, PayMaster, РобоКасса, QIWI
+25
Delphi: Быстрое (де)кодирование JPEG с помощью libjpeg-turbo
11 мин
16KКак-то раз, профилируя библиотеку для удаленного наблюдения за рабочим столом, мной было обнаружено что куча ресурсов и времени занимает кодирование/декодирование JPEG. Изучив по ускорению этой процедуры сторонние решения, было решено использовать libjpeg-turbo.
Под катом много кода на Delphi и описаны подводные камни использования библиотеки
Под катом много кода на Delphi и описаны подводные камни использования библиотеки
+6
Ресурсы, о которых должен знать каждый Android-разработчик
6 мин
189KПеревод
Сегодня я хочу поделиться с вами моим вольным переводом статьи, написанной Сергеем Повзнером (Sergey Povzner). Сергей ведёт блог bongizmo.com и занимается разработкой туристических гидов под общим названием Citybot.
В то время как Android продолжает свой невероятный рост, всё больше и больше программистов начинают разрабатывать приложения на этой платформе. Если ты начинаешь свой путь сегодня, то ты определенно — счастливчик. За последние годы Android значительно повзрослел и избавился от множества детских болезней. Информации по платформе более чем достаточно. Я же расскажу о самых важных ресурсах.
Статья будет полезна как новичкам, так и опытным разработчикам. Это гид по миру Android-разработки.
В то время как Android продолжает свой невероятный рост, всё больше и больше программистов начинают разрабатывать приложения на этой платформе. Если ты начинаешь свой путь сегодня, то ты определенно — счастливчик. За последние годы Android значительно повзрослел и избавился от множества детских болезней. Информации по платформе более чем достаточно. Я же расскажу о самых важных ресурсах.
Статья будет полезна как новичкам, так и опытным разработчикам. Это гид по миру Android-разработки.
+123
Новое в СУБД Caché 2013.1: добавление и генерация индексов на «живых» классах
4 мин
2.5KТуториал
Предположим, что у вас есть таблица с большим количеством записей и в неё нужно добавить один или несколько индексов со следующими условиями:
Для этого можно было бы воспользоваться уже известным методом %BuildIndices(), но в таком случае это не будет удовлетворять нашим условиям.
Каков же выход?
- их генерация должна быть максимально быстрой
- чтобы генерацию можно было производить порциями.
К примеру, если есть таблица на 300М записей и работы с ней можно производить только в нерабочее время, то чтобы можно было разбить весь процесс на три ночи по 100М записей - появление новых индексов и сам процесс их генерации не должны мешать текущей работе с классом/таблицей
Для этого можно было бы воспользоваться уже известным методом %BuildIndices(), но в таком случае это не будет удовлетворять нашим условиям.
Каков же выход?
+1
Информация
- В рейтинге
- 6 105-й
- Откуда
- Россия
- Дата рождения
- Зарегистрирован
- Активность