| Библиотека C++ для последовательного порта |
[02 Nov 2009|08:26pm] |
|
Посоветуйте, пожалуйста, лёгкую кроссплатформенную библиотеку для C++, позволяющую унифицированно работать с последовательным портом. Интересует совместимость Win/Linux/FreeBSD.
|
|
| Защищённый контейнер |
[16 Sep 2009|07:05pm] |
При разработке проекта на C++ возникла необходимость создать защищённый контейнер. Вернее, кросс-платформенные на уровне исходного кода классы, поддерживающие защищённое хранение информации от нескольких байт до гигабайтов, что делает необходимым поддержку потокового шифрования/дешифрования. Не имея альтернативы нанять на данном этапе профессионального криптографа, приступил к созданию велосипеда. Данная статья написана для открытого обсуждения предлагаемых решений людьми, близкими к криптографии, а также для тех, кто будет проходить этот путь с нуля, как экономия их времени и сил. В ходе изучения и анализа информации были выбраны OpenSSL (отличная скорость работы судя по сравнению с другими библиотеками, не испытал трудностей при включении в проект, кроссплатформенность), а также алгоритм шифрования AES (Rijndael) с ключом 128, 192, 256 на выбор, как признанный (соответствующим комитетом сами знаете кого) современный стандарт шифрования. Самый первый вопрос — криптографически стойкий генератор (псевдо)случайных чисел и его установка (сидирование). Только он годен для генерации, например, криптостойкого ключа. Алгоритм генератора, вполне логично, взят из OpenSSL, а вот с сидированием вопрос сложнее. POSIX системы, у которых есть /dev/*random, снимают с меня ответственность за случайный seed. Что касается Windows, то в OpenSSL можно взять набор сообщений к окну (лучше) и содержимое экрана (хуже). Несмотря на это, решение с сообщениями в окно мне не очень понравилось, так как это лишние проблемы пользователю. Я остановился на копии экрана плюс свои пять копеек. Они заключались в том, что я использую генерацию самим Windows уникального GUID, так что в seed перед копией экрана я добавляю некий крокодил из GetTickCount() XOR Системное_время XOR GUID c небольшими сдвигами и преобразованиями. Кстати говоря, в реальном тесте на Windows XP SP2 x64 генератор OpenSSL заявил что уже достаточно сидирован по умолчанию. Почему — я не знаю, но в качестве потенциальной альтернативы решение предложено (и активируется на системах, где потребуется дополнительное сидирование). Идём дальше. Предполагая, что сам ключ хранится отдельно, таким образом, контейнер должен содержать всю необходимую информацию для расшифровки. В случае AES в потоковом (cbc) режиме, необходимо хранить начальный вектор инициализации (iv0), а также точную длину данных, так как алгоритм работает с блоками по 16 байт (128 бит). Что касается хранения начального вектора, то здесь существует стандарт RFC 3394, однако, при внимательном изучении, оказалось, что в нём используется постоянное значение начального вектора инициализации. Вместе с этим, в книге «An introduction to cryptography» чётко написано, что начальный вектор ни в коем случае не должен быть постоянным (здесь). Поэтому я отказался от этого алгоритма в пользу создания вектора инициализации криптографически стойким генератором случайных чисел, что конечно хуже чем инициализация дополнительным случайным сидом, но гораздо лучше чем постоянный вектор. Длина начального вектора выбрана 16 байт, равной длине блока данных. Перейдём к заголовку. Чтобы сделать длину заголовка кратной 16 байтам (размер блок AES), вспоминаем длину вектора 16 байт, тогда все дополнительные данные лучше уместить в другие 16 байт. 8 байт занял размер (ага, большие данные). Оставшиеся 8 байт я отдал под магическое число, с некоторой вероятностью гарантирующее, что ключ подобран правильно. И здесь я тоже попытался уйти от заранее заготовленного магического числа (M). Моя идея состоит в следующем: я беру заранее заготовленное 4-х байтное число-константу. Генерирую два стойких случайных 4-х байтных A1 и A2. При этом первое число я оставляю как есть, а второе изменяю с тем условием, что A1 + A2' = M A2' = A2 + D D = M — (A1 + A2) При этом, для определения правильности пароля, я расшифровываю первый 16-ти байтный блок заголовка, беру два первых dword-а, суммирую и смотрю что получилось. Вероятность совпадения значений невелика, но конечна. В моём случае это вполне приемлимо (если неверен ключ, то это уже проблемы злоумышленника что он получил ложно-расшифрованные данные). Выравнивание размера данных по 16-байтам я делаю наиболее трививально, путём дописывания в конец нужного числа случайных байтов, которые также создаю криптографически стойким генератором OpenSSL. Таким образом, я избавляюсь от постоянных чисел в исходных данных и (как было показано выше) постоянного вектора инициализации. Дальше дело техники: 48-байтный заголовок я кодирую AES в блочном режиме (ecb), потом идут блоки данных, шифрованные в потоковом режиме (cbc). P.S. Что можно бы было улучшить: + сделать более случайным начальный сид в Windows (и POSIX?) + создавать начальный вектор инициализации при помощи сида, а не генератором + возможно, лучше бы было шифровать заголовок в том же потоковом режиме как часть данных + сделать более надёжной проверку правильности ключа +…?
|
|
|
[14 Jul 2009|12:14pm] |
Обнаружил короткую, но замечательную выдержку из стиха:
Кто проповедь прочесть захочет людям, Тот слаще жрать не должен, чем они... (Из поэтического наследия Генерального секретаря ЦК КПСС Юрия Андропова)
|
|
| О Чайковском |
[29 May 2009|08:22pm] |
В своё время я изучал жизнь этого человека, который писал действительно красивую музыку. Я даже распечатал себе его дневники и прочитал их все. И после прочтения мне было очень странно - как человек, писавший это, мог делать те вещи, в которых его сейчас принято обвинять.
И сегодня наткнулся на заметку как раз по этой теме. Поскольку я согласен с содержащимися в ней выводами, анонсирую:
"В следующем году исполнится 170 лет со дня рождения Петра Ильича Чайковского. В последнее время, великого русского композитора обвиняют не только в ужасных грехах, но и саму его мировую культурную значимость пытаются заключить в кавычки. Подходя ближе к делу, оговорюсь, что обвинений всего два – «нетрадиционная сексуальная ориентация» и «самоубийство». Как было на самом деле? ( ссылка)".
|
|
|
[14 May 2009|11:24pm] |
U++
|
|
|
[13 May 2009|12:32pm] |
Всё-таки, стандарт С++ 99-го года попытался убрать сложность указателей, введя ссылки. И это здорово. К сожалению, они остановились на пол-пути. К сожалению, ссылка так и осталась недоделанной. Теперь я могу сказать об этом отчётливо, поскольку фреймворк, на котором я работаю, активно использует ссылки (ни одного new/delete в программе без потери производительности).
Что же они упустили, с моей точки зрения, в С++ : - Ссылки нельзя переинициализировать. Скажем, если класс обменивается сообщением с объектом, инициализируемым во время, например, десериализации из XML. Так вот, я не могу сделать этот член ссылкой. Потому что инициализируется она обязательно в списке инициализации конструктора. То есть приходится делать указатель, там где без него можно было обойтись. В конечном итоге, я думаю что ссылка должна изначально быть неявным NULL (с выбросом ASSERT в отладочной версии при попытке обращения), и позволять (пере)инициализироваться при желании.
- Для ссылок нельзя выполнить виртуальный вызов. Вместо того, чтобы проходить по адресу в таблице виртуальных функций var._vtable[ID_Foo](...), компилятор автоматически вызывает var.Type::Foo(...). А ведь это неправильно: фактически, ссылка это ведь указатель, а значит правильнее было бы сохранять виртуальные вызовы.
- Отсутствие поддержки pick behaviour и moveable типов. Язык не приветствует ни в каком виде разрушающие операторы= и разрушающие "копирующие конструкторы". А зря. Если расположить в правильных местах, это увеличит производительность в разы. Moveable - это конечно тот ещё хак, но и он экономит (правда, конкретно его не замерял).
- Нет возможности на этапе компиляции взять тип аргумента. Это зачастую может быть очень неудобно. В той библиотеке "альтернативной многопоточности", которую я пишу, это бы очень помогло. В этом случае основной вызов вида visualizer.Request(&Visualizer::Update, upData); можно бы было упростить.
|
|
|
[12 May 2009|04:12pm] |
(привожу весь абзац, чтобы фраза не была вырвана из контекста)
Патриарх Кирилл отметил, что народ истекал кровью, потерял миллионы сограждан и при этом защитил столицу, потом начал наступление и победил врага. Но все это, как отметил Святейший Патриарх, нельзя связывать исключительно со способностью и доблестью полководцев и солдат. Предстоятель Русской Церкви указал на то, что теми великими потерями, которые понес наш народ в войне с фашистами, он тем самым искупил богоотступничество во времена большевиков.
- Нет слов.
|
|
| иногда полезно забить на работу |
[08 May 2009|03:04am] |
Провёл пол-ночи в поисках подходящего исполнения песни "Bring Him Home". Песня является частью мюзикла "Отверженные" по роману Виктора Гюго (к сожалению, оперу в своё время написать не успели). Это, по-своему, очень особенная песня. Её можно петь только сердцем, и только действительно понимая о чём поёшь. Многие за неё брались, исполняли по нотам, с хорошим голосом - но не передали эмоцию. В оригинальной записи Колм Уилкинсон поёт очень здорово и эмоционально, но глаза всё равно, почему-то, остаются холодными - или это просто напряжение?
Я искал спокойное, но эмоциональное исполнение хорошо поставленным баритоном. Того что искал, не нашёл. Просмотрел и прослушал все 40 страниц выдачи youtube. Из прослушанного, больше всего моментами запомнился Энтони Уарлоу.
P.S. К сожалению, у американцев принято любить эту песню и считать её в доску своей, военной. К счастью, поют её они фальцетом (если могут), сопровождая всё это одинаковым выражением физиономии (обязательно) и падением на колени (в особо клинических случаях). Что позволяет отделить все эти выступления от котлет. А ведь песня очень спокойная, слова говорит явно фаталист. Это скорее песня надежды, чем что-либо ещё. P.P.S. Британский разносчик пиццы на "Талантах", всё-таки, пел душой, в меру своих вокальных способностей. И это было отрадно.
|
|
|
[14 Apr 2009|11:54pm] |
|
По-моему, самое неприятное наследие от С в С++, это порядок объявлений. То есть нельзя в двух классах работать со структурами, объявленными друг в друге.
|
|
| [:|||||:] + fun |
[31 Mar 2009|01:23am] |
Знатокам тяжрока рекомендуется к просмотру, будет смешно, особенно в конце. Нервных просим не загораживать :)
|
|
|
[23 Jan 2009|03:48pm] |
Несколько забавных и интересных наблюдений:<
<

 




|
|
|
[21 Jan 2009|01:04am] |
|
Понтянуло поретроградствовать, весь вечер слушал Creedence Clearwater Revival - Have You Ever Seen Rain. Мне очень нравится как в этой песне солист поёт не сладко, как обычно у Криденсов, а с надрывом и хрипотцой. Облазил весь Ютюб, прослушал все каверы на песню, что там лежали. Нет, никто не смог передать то же чувство. Там напор есть. Вот интересно, как бы эту песню исполнил Владимир Семёнович. Который Высоцкий.
|
|
|
[20 Jan 2009|11:46pm] |
Огорчён болезнью Янковского. Очень хочу пожелать Олегу Ивановичу выздоровления и долгих лет.
Да пребудет с нами всеми Сила. )
|
|
|
[03 Dec 2008|10:01pm] |
Забавный диалог в комментах на DailyWTF:
Вот это новость. ...а ещё на моём старом ноутбуке, где ФриБСД, иксы с файлменеджером, браузером и средой разработки, умещаются в физическую память. Без свопа. При том что в памяти висят демоны MySQL, Apache, wpa и ещё пара. А вот Убунту начинал дико свопить при первой же попытке компиляции проекта. В результате я получил полноценный "реалтайм" на сравнительно старом ноуте. Вместо задумчивого слайд-шоу, когда там стояли ВиндаХР и Линукс. Разумеется, если не на обои любоваться, а что-нибудь серьёзное отлаживать.
Всё-таки не понимаю любителей Линукс. Во ФриБСД есть единоначалие, стабильность софта. Реально ест меньше ресурсов. По-моему, это самый реальный кандидат в Альтернативную ОС.
|
|
| Хвалюсь. Тестирование пороха |
[08 Oct 2008|02:36am] |
...в пороховницах.
Scored higher than 96% of all previous test takers. Weak Areas: None Noted Полёт нормальный.
|
|
| Луч надежды |
[07 Oct 2008|03:34pm] |
Главным дизайнером Волжского автозавода будет… иностранец! Именно Энтони Грейд, который до сих пор был вице-президентом дизайн-центра Renault, станет отныне отвечать за внешний вид всех новых Lada, передает ИА «Автостат».
И, похоже, Энтони очень доволен тем, что он будет работать в России. «Это уникальная возможность быть причастным к созданию новой команды, которую предстоит поднять до мирового уровня. Такой шанс выпадает раз в жизни! В России Lada – очень сильный бренд и является лидером продаж. Я надеюсь привнести что-то новое, привлечь молодых дизайнеров и открыть дизайн-студию в Москве, чтобы освежить бренд Lada.
// auto.mail.ru
Скрестим пальцы...
|
|
|
[07 Oct 2008|03:34am] |
Он забежал рано, после школы, запыхавшись, пробрался сквозь готовые пиджаки и небоскрёбы ящиков с заготовками. - Пап, а пап, а правда что деньги не пахнут? - Нет, сын. Так говорят те, кто забыл их запах. Задумался. Шаркнул ногой, решив докопаться до истины. - Как это забыли?.. - Видишь пиджак в углу? - Он старомодный как у дедушки! За него мне заплатили вот этой бумажкой. Понюхай. - Воняет рыбой! - Потому что это рыба. Заказчик - рыбак. Он заплатил за мою работу своей. - Старомодный рыбак! И воняет! - А тот нарядный костюм, думаешь чей? Прищурился. Ему понравилось получать ответы сразу. - Это наверное танцор! Или кто-то очень важный. - Чем пахнут эти деньги? - Не знаю... знакомый запах. Как в гараже... - Неплохо! - Ну кто?! - Подумай. - Водитель? - Да. Это водитель автобуса. Он встаёт очень рано утром и везёт вас в школу. Тут его взгляд упал на дорогой пиджак, явно пошитый на мужчину с животом. - Какой большой! Кому он? - Понюхай сам... - Но я не слышу. - Понюхай ещё. Сильнее. - Но я не слышу запаха. - Это деньги банкира, сын. Деньги его пустые, вот и не пахнут.
|
|
|
[01 Oct 2008|05:28pm] |
Под©мотрено в одном из ЖЖ. Улыбнуло.
|
|
|
[26 Sep 2008|11:53pm] |
В последней Компьютерре замочили очень забавную заметку с заграничной ИТ-выставки. Забавен сам диалог и его описание. Интересно будет всем, не только компьютерщикам.
* * *
Группа Скотта Мэйнуоринга занимается исследованием цифровых денег, причём в результате изысканий эти ребята пришли к неожиданным выводам -- например, им кажется что люди охотнее дают (и берут) в долг цифровые деньги, потому что это вроде бы и не деньги, а так. Поскольку я сам активно пользуюсь цифровыми валютами и закомых таких хватает, я усомнился. <...> -- Вы не понимаете, -- сказал Скотт. -- Представьте себе, что вы нежная девушка, которой неприятно даже думать о деньгах. -- Ну, допустим, -- сказал я и чуть отодвинулся. ( Read more... )
|
|
| navigation |
| [ |
viewing |
| |
most recent entries |
] |
| [ |
go |
| |
earlier |
] |
|
|
|
|