Я очарован шифрами. Существует замечательная книга о взломе кода Саймона Сингха под названием «Книга кодов: наука секретности от Древнего Египта до квантовой криптографии» . Книга полна различных методов кодирования, которые люди использовали на протяжении веков, чтобы скрыть свои секретные сообщения. Эта книга вдохновила меня на создание приложения, которое позволит вам выбрать метод кодирования из большого числа методов и закодировать сообщение, чтобы другой человек, получивший сообщение, мог его декодировать (с правом ключ). У меня даже было название для этого приложения: «Декодирующее кольцо» — на основе простых шифров с круговой заменой, которые были введены в кольцевые кольца в начале 1900-х годов, в основном для того, чтобы дети писали секретные сообщения друг другу.
Мой деловой партнер Элрой — блестящий художник-график, помимо прочих навыков, — и я искал новый проект для совместной работы. Я подошел к Элрою с этой идеей и предположил, что он может начать думать о графическом дизайне этого приложения, и я начну его строить. Элрой и я обсуждали интерфейс и некоторые функциональные возможности приложения, но мы также были заняты многими другими вещами, поэтому мы действительно не начали прогрессировать спустя почти год после наших первоначальных обсуждений.
цели
Разработка будет для iPhone, в Objective-C. Я много лет использовал Objective-C для написания приложений для Mac, поэтому Objective-C не был для меня чем-то новым. Кроме того, Элрой и я работали над шахматным приложением для iPhone в течение некоторого времени (который никогда не видел свет), поэтому разработка iPhone не была для нас новой. Мы также работали над забавным небольшим приложением для iPhone под названием «вверх ногами», которое уже было в App Store .
Разработка началась. Для тех, кто понимает основы Objective-C, я изначально начал с создания категории Objective-C для NSString — что-то, что расширило бы NSString, чтобы позволить вам кодировать и декодировать строки, используя пароль и метод шифрования. Первым методом, который я решил решить, был шифр Vigenère — веселый и умный шифр 1500-х годов. Я написал код для этого довольно быстро, и основное приложение собралось за несколько дней. У него был только один метод кодирования, без графики или значка. Вы напечатали сообщение. Вы нажали Encode. Вы ввели пароль. Вы видели закодированное сообщение на экране. Вы отправили его по электронной почте или SMS.
тестирование
Когда я начал работать над другими методами шифрования, был выявлен ряд проблем. При демонстрации сырого программного обеспечения друзьям стало очевидно, что большинство людей не интересовались всеми различными типами методов шифрования на протяжении всей истории. Все, что они хотели, это отправить секретное сообщение кому-то еще. Они не хотели знать детали — только то, что сообщение было в безопасности. Хотя я думал, что идея множественных методов была очень крутой, очевидно, только гики, которые любят шифры, имели какой-то интерес. Поэтому нам пришлось переосмыслить.
Исследование
Шифр Vigenère не был особенно безопасным, но не так уж и плох, насколько просты методы кодирования. Но у него был большой недостаток — он работал только с римским алфавитом. Я понял, что печатать на японском языке не получалось. Также Emoji вы не могли войти на свой iPhone. Это было что-то, что работало только для английского алфавита. И это не сработало для чисел тоже. Внезапно этот метод не показался мне хорошим выбором.
Это не собиралось сокращать это. Мы с Элрой решили, что мы хотим не только сделать отличное, простое приложение, которое было бы красивым и функциональным, но мы хотели, чтобы оно работало на неанглийских языках и изначально имело большой выбор языков для самого интерфейса. Мы живем в Мельбурне, Австралия, и это многокультурное общество. У нас есть друзья со всего мира, которые помогут нам интернационализировать наше приложение.
Люди говорят, что способ создания успешных приложений на iPhone — это начать с чего-то простого и «вычеркнуть из этого дерьмо». И это то, что мы решили сделать.
Я вернулся к чертежной доске и посмотрел на методы шифрования. Вместо того, чтобы использовать что-то старое, я решил использовать что-то новое. Я выбрал Advanced Encryption Standard — стандарт шифрования с симметричным ключом, принятый правительством США, с 128-битным ключом. Это позволит более надежно зашифровать сообщение и работать с любым текстом, а не только с английским. Это было быстро и отлично работало для наших нужд.
тестирование
Как показали ранние исследования, большинство пользователей не хотели возиться с выбором методов кодирования, что означало, что акцент приложения переместился с кодирования на более безопасный способ передачи сообщений друзьям. С этим изменением мы начали чувствовать, что название «кольцо декодера» стало менее подходящим, поэтому Элрой начал работать над проектами пользовательского интерфейса, которые более характерны для «безопасности» или «безопасности». Отказ от любого представления о множественных методах кодирования также означал, что требования к пользовательскому интерфейсу были значительно упрощены.
Пользовательский интерфейс
Итак, Elroy начал работу над внешним видом приложения. Он макетировал изображения и отправлял их мне, я давал отзывы, и мы ходили взад и вперед, пока не увидели, что, по нашему мнению, они идеально подходят для приложения. В конечном итоге мы остановились на идее использования навесного замка и металлических текстур в пользовательском интерфейсе для демонстрации прочности и безопасности. Текстовое поле в стиле бумажной распечатки сохраняло ощущение старой школьной шпионской техники, которое мы считали подходящим. Было также принято решение сделать пользовательский интерфейс максимально текстовым, вместо этого полагаясь на (надеюсь) интуитивно понятные значки для таких функций, как удаление, SMS, электронная почта, буфер обмена и т. Д. Элрой работал над значками и графикой и предлагал способы отображения текста. ,
локализация
Используя методы локализации Apple, все строки в приложении, отображаемые пользователю, помещаются в файл «Localizable.strings». Чтобы локализовать для другого языка, вы в основном берете файл, заменяете текст другим языком и говорите Xcode, какой язык представляет новый текст. Файл заканчивается кодом, таким как следующий для японского языка:
/* Dialog buttons */
"OK" = "OK";
"Cancel" = "キャンセル";
/* Encode dialog */
"Encoding Key" = "暗号化パスワード";
"Enter key to encode message." = "パスワードを入力。";
В течение короткого периода времени у нас были английская, французская, японская, малайская, индонезийская, корейская, китайская, испанская, итальянская и греческая локализации. И iPhone позаботился о отображении правильного текста на языке пользователя.
Пользовательский интерфейс
Элрой хотел, чтобы текст зашифровывался не только на экране, но и каким-то образом анимировался. Мы экспериментировали с парой анимаций. Одной из анимаций, которые мы попробовали, было удаление бумаги с экрана, а затем новое зашифрованное сообщение покатилось по странице. Хотя это было круто, это было не совсем правильно, и в итоге мы пошли с текущей анимацией, где страница отозвана, а затем возвращается в зашифрованном виде. Цель этой анимации состояла в том, чтобы показать пользователю, что приложение функционировало до отправки их в SMS или почтовый клиент телефона, вместо того, чтобы просто выгнать их из приложения без предупреждения. Мы также добавили несколько простых звуковых эффектов (с возможностью отключить их). Мы действительно доработали интерфейс, пока он не выглядел и не чувствовал себя прекрасно.
тестирование
Со всем программным обеспечением одной из областей, которая занимает больше всего времени (и, как правило, недооценивается), является тестирование. При использовании десяти языков приложение должно было пройти тщательное тестирование с участием нескольких добровольцев, чтобы убедиться, что оно работает должным образом и правильно отображает текст. Незначительные изменения часто делались, и новая версия отправлялась для тестирования. В то же время нам нужно было имя для приложения. У всех были предложения — «Декодер», «Кодировщик», «SecretKeeper», «TalkSecret», «Enkrypt». Мы хотели что-то простое — одно слово — и были поражены, когда я проверил и обнаружил, что имя «Секрет» все еще доступно для использования в iTunes App Store. Мы быстро зарегистрировали его в Apple, чтобы никто не использовал его, пока мы заканчивали графику.
Выпуск
Наконец, мы решили, что программное обеспечение было готово к выпуску.
К сожалению, Apple так не думала. Ну, на самом деле это была не Apple, а правительство США. Видите ли, метод шифрования, который мы выбрали, не подлежит экспорту в соответствии с правительством США. Они считают это слишком сильным. Это означало, что программное обеспечение нужно было изменить.
Таким образом, было сделано последнее изменение для использования стандарта шифрования данных с 64-битным ключом. Это был предел, который правительство США допустит.
Теперь, читая это, вы можете подумать, почему это важно, что говорит правительство США? В Европе у них нет этого ограничения, так почему европейцы не могут иметь более надежное шифрование?
Дело в том, что даже если мы поставляем программное обеспечение европейцам, оно загружается с серверов Apple в США. Так что говорит правительство США. Мы могли бы попросить правительство США об исключении, но это потребовало бы, чтобы мы отправили весь исходный код правительству США для проверки, а затем ожидали ответа в течение долгого времени. В конце концов, было проще перейти на DES. И большинство людей сказали бы, что это более чем достаточно безопасно для целей этого приложения.
Усвоение
Это изменение в последнюю минуту фактически создало ошибку, которая была исправлена через некоторое время. Вот в чем проблема с последними изменениями — тестирование не выявило ошибку. Но, в конце концов, это было исправлено, и Secret стала доступна с января 2011 года с очень положительными отзывами. Интересно, что он был чрезвычайно популярен в Японии, что свидетельствует о том, что другие разработчики, имеющие время для интернационализации, имеют свои преимущества.
Приложение : Секрет