Журнал Витуса.'s Journal
 
[Most Recent Entries] [Calendar View]

Tuesday, January 13th, 2015

    Time Event
    3:51a
    Симметричное шифрование
    Задумался о том, что бы такое использовать для шифрования текстовых файлов на андроиде.

    Чтобы по удобству не уступало keepass для паролей. А лучше превосходило.

    То есть требования такие

    1. Симметричное password-based шифрование с использованием стандартных алгоритмов и форматов. То есть чтобы не нужно было лезть в исходники чтобы понять что это там такое и насколько оно надежное.

    2. Чтобы при расшифровании информация показывалась на экране. Меня устроит решение, которое не будет работать ни с с чем, кроме utf-8 текста, но clear text, зашифрованный на десктопе на SD-карту или внутреннюю энергонезависимую память телефона не должен попадать никогда. (это умела еще pgp 2.6.3 даже под однозадачной DOS, но почему-то не умеет APG).

    3. Возможность работы с этими файлами в десктопном Linux-е без установки софта, не входящего в дистрибутив. В идеале, конечно, чтобы там CMS EncryptedData использовалось в качестве формата. Тогда его можно будет в vim читать openssl-ем.

    4. Чтобы оно не смело по своей инициативе соваться в сеть. Ни рекламы, ни попыток работать с каким-нибудь облачным сервисом.

    5. Было бы неплохо если бы андроидное приложение позволяло редактировать текст и сохранять, обратно зашифровав (без промежуточной записи в энергонезависимое хранилище открытого текста). Можно ли без промежуточного сохранения в незашифрованном виде на SD-карту редактировать это в Jota?

    Вариации на тему GPG/OpenPGP я уже посмотрел. Пока две - AGP и GnuPG for Android,
    Для решения моей задачи они совершенно не приспособлены.

    APG прежде чем начать шифровать данные паролем требует сначала создать себе ключевую пару RSA (и энтропию для нее собирает непонятно откуда несколько минут). Ну и не умеет расшифровать файл на экран.

    У GnuPG для андороида вообще после штатной установки средствами плеймаркета при запуске начинается невообразимо долгий процесс "Setting Up Gnu Privacy Guard". Правда, дождаться места где можно нажать кнопочку Skip в ответ на предложение создать ключи, мне удалось. При этом похоже, что если в процессе этой операции лочится экран, оно потом начинает заново.
    И еще какой-то pinentry daemon запускает. Вообще GnuPG последнее время даже на десктопе онгомел до полной неюзабелности. Ну не имеет права хрень, работающая с ключами и паролями САМОСТОЯТЕНЛЬНО, БЕЗ ВЕДОМА ПОЛЬЗОВАТЕЛЯ, запускать долгоживущие процессы хранящие эти ключи и пароли в памяти. Key Agent штука полезная, но он должен запускаться только явным образом, как в ssh. И ключи в него грузиться выгружаться тоже явным образом, а если ключ явным образом туда грузить не просили (при запуске ssh введнеа пассфраза), он туда попадать и не должен.

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

    Upd Пока лучшее решение из найденных - поставить на телефон полновесный vim и пользоваться его встроенной шифровалкой (:help encryption).
    Надо только не полениться в .vimrc написать set cm=blowfish. Потому что cm=zip ломается на современных процессорах в секунды.

    This entry was originally posted at http://vitus-wagner.dreamwidth.org/1042064.html. Please comment there using OpenID. Now there are Image comments
    2:34p
    Книголюбское
    А.В. Столяров, некогда известный в ЖЖ как croco, собирает денег на краудфундинговый проект книги "Программирование. Введение в специальность".

    Это личность достаточно неординарная, зотя до "нашего советского Эрика Раймонда" он всё же по-моему не дотягивает. Посмотрев на план задуманной книги мне захотелось, правда, материться.

    Потому что опять там обучение детей плохому. В смысле Турбо Паскалю и модулю crt. Надо что-ли попробовать ему объяснить всю глубину концептуальной ужасности этого модуля. Ведь есть же у него раздел "Почему за использование gets и scanf("%s",...) увольняют с работы ". Вот за использование модуля crt не увольняют с работы только потому что за написание на турбопаскале давно никому денег не платят. А в то время, когда я получал деньги за это (лет двадцать назад), я б увольнял. Особенно, за использование этого модуля в программах имеющих CLI-интерфейс, программах, использующих графический режим и программах, использующих Turbo Vision. Впрочем, после распространения процессоров с частотой более 200МHz за использование этого модуля нужно вешать на прерывании от таймера в любом случае.

    И еще стоит рассказать, раз уж мы с этим связываемся, почему модуль opcrt из Objects Professional далеко не такая ужасная гадость, как модуль crt.

    Ну то есть на примере этого модуля можно очень хорошо учить детей как НЕ НАДО программировать.
    Благо исходники доступны.

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

    Но пихать лисп в раздел "парадигмаы программирвоания" по-моему, огромная концптуальная ошибка. Лисп по мультипарадигменности превосходит C++ и Perl вместе взятые. А парадигмы лучше демонстрировать на чистых примерах.

    Вообще интересно, можно ли заинтересовать этим проектом balovstvo.me. Если правильно попинать автора в нужном направлении, может получиться очень неплохая книга, и будет обидно если качество ее бумажного издания окажется не на уровне.

    This entry was originally posted at http://vitus-wagner.dreamwidth.org/1042343.html. Please comment there using OpenID. Now there are Image comments
    2:50p
    Про FDE
    Вот не люблю я Full Disk Encryption. Считаю ее абсолютно неприминимой во-первых, для стационарных компьютеров и NAS, во-вторых для смартфонов. И очень ограничено применимой для ноутбуков.

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

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

    То же самое на стационарном компьютере, который и ломать-то скорее всего будут по сети. При этом FDE - жутко ресурсоемкое мероприятие, хуже только антивирус.

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

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

    This entry was originally posted at http://vitus-wagner.dreamwidth.org/1042631.html. Please comment there using OpenID. Now there are Image comments
    7:41p
    Что бы я написал в книге; "Программирование. Введение в специальность"
    Я, конечно, практическим преподаванием не заниммаюсь, поэтому писать такую книгу вряд ли возьмусь. Но по-моему, подходить к задачи следует следующим образом:

    Специальность называется Software Engineering, а Programming - это всего лишщь одно из многочисленных умений, которыми нужно владеть для того, чтобы этим заниматься.

    Поэтому в курсе введения в специальность нужно дать именно общее представление, чем занимаются профессионалы в этой специальности. Учебников по собственно программированию есть довольно много, и в том числе и не плохих. Есть даже учебники на более широкую тему, такие как The Practice of Programming Кернигана и Пайка или The Art of Unix Programming Раймонда.

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

    Сосредоточиться в этом вводном курсе нужно на двух вешах, систематическое изложение которых мне, к сожалению неизвестно:

    1. Программа в своей окружающей среде
    2. Разработчик в своей окружающей среде

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

    Сюда же стоит отнести обзор всяких архитектурных решений, вроде клиент-серверной архитектуры vs inprocess, многопроцессность-многонитевость-асинхрнонные событийно управляемые архитектуры, базы данных реляционные и документоориентированны.

    Второе - это описание некоего идеализированного процесса разработки с системой контроля версий, билдами, тестами автоматическими и ручными. continuous integaration, релизами и багрепортами с воркфлоу в трэкере. Причем тоже на конкретных примерах некоего учебного проекта, проходящего через всю соответствующую часть книги.
    Естественно с документированием вплоть до literate programming.

    Про отладчики, профайлеры, сoverage analyzer-ы и прочие инструментальные средства тоже не забыть упомянуть.

    Здесь же - про характер общения как в командах разработчиков, так и в сообществах пользователей всяких инструментальных средств. Ну текст про smart-questions все читали. Кто не читал, прочитайте сейчас.

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

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

    И вообще надо внушить студентам, что если для выработки "врожденной грамотности" и стиля при писании на естественном языке надо читать художественную литературу, то для обретения программисткой грамотности и стиля надо читать код. Желательно лучшие образцы, написанные лучшими программистами мира. Благо тут с языковым барьером заметно проще.

    This entry was originally posted at http://vitus-wagner.dreamwidth.org/1042768.html. Please comment there using OpenID. Now there are Image comments

    << Previous Day 2015/01/13
    [Calendar]
    Next Day >>

Журнал Витуса.   About LJ.Rossia.org