Пользователь
0,0
рейтинг
11 июня 2014 в 13:26

Разработка → Раскрывая секрет. Архитектура Secret перевод

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

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

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

Заглянем под капот


Давайте сфокусируемся на двух вопросах. Хранилище — как и где хранится ваша информация. Доставка — как мы доставляем секреты людям, которых вы знаете.

Хранилище

Во-первых, ваши данные хранятся на серверах Google, там же, где находится Gmail. Это значит, что ваши секреты так же надежно защищены, как и почта (это относится к надежности записи данных на диск, которые расположены в тех же дата-центрах что и Gmail). Как бывший инженер Google с глубоким знанием бэкэнда, я уверен в этом выборе.

Несколько высокоуровневых подробностей:

  • Secret хостится на Google App Engine. Написан почти полностью на Go, но имеет некоторые компоненты на Java и Python.
  • Все данные передаваемые по проводам зашифрованы с помощью TLS.
  • Мы используем нереляционную базу данных на основе Google BigTable.
  • Все сообщения шифруются перед тем, как будут записаны в базу данных. Ключи находятся на стороннем сервисе, который поддерживает ротацию ключей.
  • Изображения хранятся на Google Cloud Storage и передаются через TLS.

Контакты. Когда мы ищем людей, которых вы знаете из ваших Контактов, мы не посылаем в открытом виде номера телефонов или e-mail на наши сервера. Сначала мы локально вычисляем хеш (с «солью»), который использует сервер, чтобы найти совпадения с другими хешами. Например, номер [+15552786005] становится [a22d75c92a630725f4], и оригинальный номер телефона никогда не покидает ваш аппарат. Это односторонняя трансформация. Иными словами, мы не знаем ваших действительных данных, в отличие от других сервисов.

Важное замечание: Несмотря на то, что мы добавляем «соль» в хеш, все же возможно сравнить хеш с номером телефона, особенно если у злоумышленника есть «соль». Мы ищем способ сделать это более безопасным (например, добавлять в хеш специфичные для пользователя данные или использовать Протокол Диффи). Если у вас есть предложения по улучшению безопасности, пишите на security@secret.ly. Эта область нам очень интересна.

Секреты. Мета данные секрета хранятся без привязки к пользователю. Вместо этого, при доставке секрета пользователю мы создаем уникальный токен для пользователя и предоставляем доступ к секрету как отношение много-к-одному. Токены находятся в ACL, принадлежащем секрету, а не пользователю. Сообщения (комментарии и посты) шифруются на сервере и расшифровываются, когда уникальный токен обменивается на секрет. Сервер никогда не возвращает персонально-зависимые данные наряду с секретом.

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

Идентификация. Для модераторов нет никакой возможности найти пост, созданный конкретным пользователем. В случае, если нам нужно получить доступ к информации для отладки или административных целей, мы используем «Правило двух человек». Два человека должны одновременно предоставить свои ключи. В нашем случае, два админа (сейчас это основатели) должны зайти через аккаунт Google (с двух-факторной авторизацией) и запросить нужный ресурс в определенный период времени. Более подробно эта система, известная как Red October, описана в блоге Cloudflare.

Доставка

Система доставки Secret была спроектирована, чтобы соответствовать этим критериям:
  • Должна быть безопасной.
  • Должна быть быстрой.
  • Должна обучаться.

Что происходит когда вы постите

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


Что не происходит

  • Мы не доставляем секреты людям из ваших Контактов. Если человек есть в вашей записной книжке, это не обязательно значит, что он получит секрет.


Время. Хотя наша система имеет высокую пропускную способность, это не значит, что секреты всегда доставляются мгновенно. Например, чем меньше «друзей» есть у пользователя, тем меньше мы показываем ему. Это позволяет избежать трюка, когда можно вычислить, кто написал секрет.

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

Соединяя все вместе

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

В наши дни и наш век, безопасность и приватность важны как никогда. Это было важно для нас в Google и Square и всегда будет высшим приоритетом в Secret.

David Byttow
Со-основатель, Secret
Перевод: David Byttow
Алексей @alehano
карма
29,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

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

  • +5
    Приложение ловит ANR, и вообще катострофично медленно работает. Как Android-разработчик, не понимаю, почему? Ведь довольно легко сделать, чтоб такое простое, с клиентской стороны, приложение работало ловко. Может кто-нибудь знает? Спасибо.
    • 0
      Это уже зависит от прямоты рук Android-разработчиков. На Nexus 4 вроде работает Ok. Возможно, они тестировали на малом количестве устройств.

      К фронтенду и другие претензии есть. Например, совершенно неочевидный способ менять яркость и размытость фона. И неочевидность перехода в настройки. Скорее всего, поправят в будущем. В целом, минимализм радует.
      • +2
        И даже когда вы делаете pull to refresh, у вас всё работает нормально? У меня тоже довольно производительное устройство, но местами приложение зависает ужасно =(
        • 0
          Сейчас точно не могу сказать, т.к. снес его. При рефреше, помню, были подтормаживания.
        • +1
          У меня на nexus4 ощутимо тупит.
    • +4
      Объяснение, ИМХО, предельно простое: у всех начальников айфоны, поэтому на айфон делают хорошо, быстро и красиво, а на андроид — как получится. Это очень распространённая проблема, с которой и я сам, как андроид-разработчик, сталкивался (и периодически сталкиваюсь до сих пор).
      • –15
        Андройд – генерирует меньше прибыли. По факту сейчас это так. Платите за контент и под Андройд будет все больше качественных приложений
        • +4
          • +15
            Бог убивает котёнка каждый раз, когда встречает вместо обычного текста, текст, написанный картинкой.
          • +7
            Боги (если они существуют) убивают котёнка каждый раз, когда вы даёте ссылку на текст в JP(E)G.
    • 0
      У меня вопрос как к разработчику, что лучше использовать для pull to refresh? «Изкоробки» такого вроде нет, а в ручной реализации можно много где набажить.
      • +1
        С недавнего времени есть! =) Ну, практически «из коробки». В support v4 добавили SwipeRefreshLayout, которому можно установить OnRefreshListener, который будет выполнять нужные команды в нужное время.

        Есть сэмплы от гугла, как это использовать, но я их не смотрел. Вот списочек сэмплов:
  • +3
    На айос тоже работает отвратно.
  • 0
    Вчера вечером пришло на почту сообщение от этих ребят, якобы какой-то мой друг анонимно решил предложить мне присоединиться.
    Подумал что спам.
  • +2
    оригинальный номер телефона никогда не покидает ваш аппарат. Это односторонняя трансформация. Иными словами, мы не знаем ваших действительных данных, в отличие от других сервисов.


    LOL, а смс-подтверждение как отправляется? по хешу? :)
    • –1
      Регистрируемся в системе -> отправляем ей свой номер телефона -> система генерирует код для номера телефона -> сохраняется связь сгенерированного кода и хэша телефона и одновременно отправляется смс с кодом, без сохранения этого номера -> когда человек вводит код в приложении, на сервисе проверяется, есть ли такая пара(код и хэш указанного номера). Profit =)
      • –1
        >оригинальный номер телефона никогда не покидает ваш аппарат
        • +2
          Да, хороший вопрос!
          Сначала подумал, что не совсем точный перевод, посмотрел оригинал — всё с переводом.
          Therefore, [+15552786005] becomes [a22d75c92a630725f4] and the original number never leaves your phone. This is a one-way transformation.
          Однако, это всё написано в рамках абзаца про Контакты. Т.е. речь о телефонах контактов — они никогда не покидают ваш аппарат. Собственный номер, получается, покидает-таки!
          • 0
            а так как контакты тоже регистрировались их номеру тоже уходили к секрет.ли — ну да, наш аппарат они если и не покидали то у секрета они всё-равно могут быть не только хэшем. что-то где-то не то с этим секретом…
    • +2
      Насколько я знаю, никаких SMS они не проверяют. И даже e-mail подтверждать не обязательно.
      • 0
        Необязательно, но можно. И, насколько понимаю, без чека телефона не будет круг друзей работать.
        • 0
          ничего не подтверждал, все работает
  • +3
    Впечатление от приложения как пользователя:
    1. Поставил себе
    2. Почитал кто по-близости где и когда теребонькает
    3. Удалил
    • +3
      1. Поставил приложение
      2. Передал свои контакты/SMS третьим лицам
      3. Удалил
      • 0
        Только контакты. У приложения нету разрешения на доступ к SMS.
  • 0
    Мне понравилась идея секретных сообщений. Но по-моему концепция еще далека от совершенства — большинство секретов сейчас попросту превращаются во флуд. Поскольку отвечать на комментарии нельзя, то люди в одной ленте параллельно обращаются друг к другу по названию аватара и получается каша. Еще не хватает системы рейтингов по типу stack overflow, чтобы премировать более активных и оригинальных комментаторов. Но уверен, что они быстро исправятся и хочется только пожелать удачи разработчикам!
  • +2
    это такой хитрозадый двач? или я что-то не понимаю?
    • +2
      Это двач для хипстоты.
    • 0
      Похоже на начало Жуйка.
      • 0
        Он уже кончился.
  • +1
    Сильно не хватает описания приложения в 1 абзац в начале перевода.
  • +1
    Сначала мы локально вычисляем хеш (с «солью»), который использует сервер, чтобы найти совпадения с другими хешами. Например, номер [+15552786005] становится [a22d75c92a630725f4], и оригинальный номер телефона никогда не покидает ваш аппарат.

    Интересно, а «с солью» они для пущей веры в безопасность добавили? Ну типа модно теперь солить хеши. Если каждый клиент использует свою соль, то тогда хеши от одинаковых номеров никогда не совпадут. Если клиенты используют одну соль, которая на сервере статически задана в коде, то толку от неё никакого нет. Перебрать все комбинации хешей md5 от цифр длинной 11 — задачка на несколько часов для не самой топовой видеокарты. Интересно, как же у них на самом деле оно реализовано?
    • 0
      Не совсем понял. Перебором же можно вычислить номер если он без соли. Иначе нужно знать соль. Или вы говорите про вычисление соли перебором?
      • 0
        Соль не является секретом и известна тому, кому известен хеш. Соль нужна для защиты от перебора по предварительно сгенерированным таблицам хешей. А зачем она в данном случае, я пока не понял.
        • 0
          Всегда думал что соль должна быть неизвестна третьим лицам.
          • 0
            Третьим лицам она и не должна быть известна, но в данном случае сервер к ним не относится, ведь хеш для него и считался, а без соли он для него бесполезен. Хотя сама по себе утечка соли третьим лицам в большинстве случаев не несёт угрозы безопасности, но мне встречался один проект, где можно было узнать соль любого пользователя, а при регистрации последовательно генерировались соль и код для восстановления пароля, и знание соли позволяло восстановить значение, передаваемое в srand и сгенерировать такой же код, какой был назначен пользователю при регистрации и если он не пользовался функцией восстановления пароля, то можно было сменить его пароль на произвольный.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.