Lavabit — это анонимный почтовый сервис (dark mail), которым пользовался Эдвард Сноуден, находясь в Шереметьево летом 2013 года. Как только американские спецслужбы узнали об этом, они заставили владельца Lavabit Ладара Левисона установить следящее оборудование на сервере. Затем ФБР обнаружило, что почта зашифрована, и потребовала от владельца выдать секретные ключи TLS. Тот отказался. Начался судебный процесс, по результатам которого Левисон предпочёл закрыть Lavabit и уничтожить ключи шифрования.

«Дорогие друзья, меня заставили сделать сложный выбор: стать соучастником преступления против американского народа или отказаться от почти десяти лет тяжелой работы и закрыть Lavabit. После долгих раздумий, я решил прекратить работу», — написал он тогда. Его послание до сих пор висит на главной странице lavabit.com, в то время как Левисон продолжает судиться с американским правительством, требуя снять секретность с его дела.

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

В репозитории Github — исходный код почтового демона magma, который поддерживает шифрование на сервере, SMTP, POP, IMAP и HTTP (с интерфейсом JSON-RPC для почтового веб-клиента, он тоже там есть).

Опубликованы также исходники библиотеки libdime для многоуровневого шифрования Dark Internet Mail Environment (DIME, см. спецификации протокола).

Комментарии (18)


  1. leek
    01.05.2016 16:36

    Исходный код надо было сразу открывать — всему миру не запретишь пользоваться.


  1. LonFas
    01.05.2016 17:57
    +1

    Теперь надо проводить полноценный аудит кода. Так как не ясно есть ли там закладки от ФБР. Они могли заставить что-то реализовать.


    1. Mixim333
      02.05.2016 14:04

      Огромное уважение Левисону за то, что не сдал ключи TLS ФБР! Насчет же аудита кода: Вы, наверное, правы, посмотрите на аватар автора на GitHub: https://github.com/ladar — мне не по себе становится, когда я смотрю на собачку на этом аватаре, у которой род перетянут витой парой…


  1. Vjatcheslav3345
    01.05.2016 18:16

    А вот такой-разтакой вопрос — сейчас все сходят с ума по нейросетям (ну там Альфаго, раскраска фильмов и картинок и т. п.) а тут всё растёт проблема с закладками в СПО которые теперь норовят вставить все, кому не лень — чего доброго, даже маркетологи начнут вставлять свои рекламные закладки, не то что спецслужбы — нельзя ли научить нейросеть вылавливать опасный или сомнительный код — как в смысле его опасности с точки зрения ошибок (дегаггинг, человекочитаемое дезассемблирование кода и т. д.), так и в смысле отлова закладок — ведь это сильно удешевит аудит.
    Надеюсь, кто нибудь мне ответит — «мы уже давно работаем над этим вопросом, и альфа релиз уже вот-вот»...:)


    1. leek
      01.05.2016 18:57

      Для этого надо научить нейросеть кодить. А бэкдор может быть просто переполняющимся буфером или что то подобное.


      1. LonFas
        01.05.2016 19:12

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


        1. LonFas
          01.05.2016 19:17

          И идеи конкурса «Underhanded C» никто не отменял https://geektimes.ru/post/260332/


          1. Vjatcheslav3345
            01.05.2016 21:06

            Вы шутите? Альфаго не в состоянии промычать «Мама» — но обыгрывает чемпионов.
            Тут дело в другом — косяки программ и установленные бэкдоры имеют ограниченное специфическое поведение — например, переполнение буфера — это переполнение буфера, не зависимо, от того на каком языке писан код, бэкдор норовит незаметно держать связь по сети со своим создателем, вирусы реагируют на определенные действия определенным образом — вот эти специфические нюансы и надо ловить сначала в исполняемых файлах а уже оттуда — указывать соответствующие фрагменты кода в текстовых файлах
            А вот кодить нейросеть наверняка можно научить — сейчас уже нейросети рисуют картины по образцу — аналогично — можно кормить её кодом, скачиваемом из опенсурса в сети и она начнет синтезировать его, увидев данный ей затем похожий «фрагмент»- если код не компилируется, тогда её «наказываем» и повторяем всё на автомате, пока не получится «кодер» уровня школьника или студента — затем думаем что делать дальше — например, натравливаем одну сеть на другую — на «кодера» напускаем «ревизора», ищущего ошибки и закладки — они друг друга обучают до бесконечности.
            Затем следующий этап — учим оставлять в коде шаблонные комментарии, чтобы человеку его лучше читалось и т. д.


            1. Vjatcheslav3345
              01.05.2016 21:14

              Касательно вирусов, бэкдоров и прочих зловредов — вся сеть — это огромная бигдата подобного «добра» — только успевай хватать пробегающую мимо вирусню и кормить ей сеть.


              1. Vjatcheslav3345
                01.05.2016 21:22

                А ошибки можно набрать из опенсурсных проектов — там наверняка можно найти исправляемые по тем или иным причинам фрагменты существующих файлов и вот этими то фрагментами, вместе с соответствующими им частями двоичных файлов (у которых структура то — стандартизированная), кормить обучаемого «ревизора».


                1. Vjatcheslav3345
                  01.05.2016 21:34

                  Кстати, ничего нового я не сказал — именно так работают (очень, очень эффективно(!)) почтовые спамовые фильтры, читающие текст и фильтрующие письма. Даже скомпилированный файл, машине несложно рассматривать как текст и соответственно — фильтровать его по поведению — тут уже не скроешься, сделав трудночитаемым текст программы, или разложив вредоноса по укромным уголкам программы — для машины все эти наивные хитрости не будут иметь никакого значения — ведь она смотрит на особенности поведения кода.


                  1. Vjatcheslav3345
                    01.05.2016 21:55

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


                    1. Vjatcheslav3345
                      01.05.2016 22:06

                      Дальше — больше, можно учить сети выявлять закладки в «железе» — в нашем распоряжении есть компьютер и работая на самом низком уровне, можно спалить те же самые особенности что и в программах — несанкционированное поведение железа.


                      1. oldbie
                        01.05.2016 23:24

                        Как я Вас понимаю! Всегда приятно поговорить с умным человеком =). Но наверное хватит уже, пишите статью. Без шуток.


            1. Telmah
              01.05.2016 23:24

              Не обязательно что часть софта для «связи по сети со своим создателем» изначально есть в софте. Бэкдор может быть пассивной дыркой — тем же переполнением буффера, который позволить этот софт залить на машину…


              1. Vjatcheslav3345
                02.05.2016 00:58

                А это и есть пожива для «ревизора»!


                1. Dum_spiro_spero
                  02.05.2016 13:17

                  «если код не компилируется, тогда её «наказываем»»
                  Интересная мысль! И сеть выдает на экран — «Ну не надаааааа! Я всего лишь точку с запятой забылаааа!!!».
                  Вообще это примерно как осваивать язык программирования без книжки — по образцам кода и да, это несколько бездумно.
                  Хотя некоторые так и делают — скажем используют указатели в Си просто как некие странные переменные со звездочками и зная, что в таких-то ситуация надо делать так просто потому что…
                  В конце 90-х мой шеф в лаборатории как-то выдал гиперфилософское обобщение — что программисты будут не нужны — машины всё будут делать сами. А потом появились Борланд Билдер и Дельфи — и я подумал, что он не так-то и неправ.
                  Может теперь нас ждет следующий этап?


                  1. Vjatcheslav3345
                    02.05.2016 13:42

                    Именно так и учат нейросети — https://habrahabr.ru/post/148830/ Просто циклы могут повториться тысячи раз за секунду, а поскольку язык программирования — очень ограниченная и жесткая по правилам, в отличие от фото или рисунка, система, то сеть быстро научиться писать компилируемый код.
                    Так когда то учили людей, не имея современной развитой педагогики — https://yandex.ru/images/search?img_url=http%3A%2F%2Fsch69.narod.ru%2Fraz%2F1%2F685%2F17.jpg&text=%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%2017%20%D0%B2%D0%B5%D0%BA%D0%B5%20%D0%B2%20%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B8%20%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8&noreask=1&pos=1&lr=36&rpt=simage