• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Гостевая статья Swift Crypto

Swift Crypto
Я очень рад объявить о новом проекте с открытым исходным кодом для экосистемы Swift , Swift Crypto . Swift Crypto - это новый пакет Swift, который предоставляет фантастические API для более широкого сообщества Swift. Это позволит разработчикам Swift независимо от платформы, на которой они развертывают свои приложения, получить доступ к этим API для общего набора криптографических операций.

Эта новая библиотека предоставляет кроссплатформенное решение для использования API-интерфейсов CryptoKit на всех платформах, которые поддерживает Swift. Это означает, что на всех платформах, которые поддерживает Swift, теперь вы можете просто написать следующее, чтобы получить все API CryptoKit:
import Crypto
На платформах Apple Swift Crypto напрямую относится к CryptoKit, в то время как на всех других платформах используется совершенно новая реализация, построенная поверх библиотеки BoringSSL. Это дает пользователям Swift легкий доступ к набору простых в использовании, безопасных криптографических API-интерфейсов на всех платформах и является чрезвычайно полезным инструментом при написании межплатформенного криптографического кода.

Примеры
Swift Crypto предлагает множество сильных решений, которые чрезвычайно просты. Например, безопасное аутентифицированное шифрование, которое скрывает ваши данные и защищает от злоумышленников, пытающихся изменить их с помощью AES GCM, так же просто, как:
Код:
func encrypt(input: [UInt8]) throws -> Data {
    // Don't forget to save your key somewhere!
    let key = SymmetricKey(size: .bits256)
    let sealedBox = try AES.GCM.seal(input, using: key)
    return sealedBox.combined!
}
Этот код позволяет избежать некоторых из многочисленных ловушек, с которыми вы можете столкнуться при создании схем шифрования самостоятельно. Например, он гарантирует, что вы используете случайно выбранный одноразовый номер, и что вы аутентифицируете свой зашифрованный текст. Оба они защищают от различных атак на систему, но не обязательно являются автоматическими во многих других криптографических библиотеках.

Точно так же легко сгенерировать коды аутентификации сообщений, которые вы можете использовать, чтобы гарантировать, что данные не были подделаны:
Код:
func authenticate(message: [UInt8]) -> [UInt8] {
    // Again, don't forget to save your keys!
    let key = SymmetricKey(size: .bits256)
    return Array(HMAC<SHA256>.authenticationCode(for: message, using: key))
}
И даже довольно сложная логика выполнения обмена ключами по эллиптической кривой покрыта Swift Crypto. Например, используя Curve25519 для генерации общего секрета:
Код:
func curve25519SharedSecret(myKey: Curve25519.KeyAgreement.PrivateKey, theirKeyBytes: [UInt8]) throws -> SharedSecret {
    let theirKey = try Curve25519.KeyAgreement.PublicKey(rawRepresentation: theirKeyBytes)
    return try myKey.sharedSecretFromKeyAgreement(with: theirKey)
}
Конечным результатом этих простых, но мощных API-интерфейсов является то, что теперь вы можете создавать безопасные кроссплатформенные схемы шифрования практически без кода и без особых знаний.

Для получения более подробной информации об Apple CryptoKit, пожалуйста, см. Сессию и . В оставшейся части этого поста я расскажу о том, что Swift Crypto привносит в экосистему, и о чем должны заботиться пользователи при работе с проектом.

Что такое Свифт Крипто?
По своей сути Swift Crypto - очень простая идея, состоящая из двух частей:

  • API от Apple , опубликованные в библиотеке под лицензией программного обеспечения с открытым исходным кодом.
  • Полная реализация этих API-интерфейсов с использованием BoringSSL от Google в качестве базовой реализации криптографических примитивов.
Однако наряду с этими простыми идеями существует ряд очень сложных проблем реализации. Первая из них это оборудование. Хотя большая часть Apple CryptoKit представляет собой простую реализацию хорошо известных криптографических примитивов, подмножество API построено на использовании процессора Secure Enclave Apple для безопасного хранения и вычисления ключевого материала. Процессор Apple Secure Enclave недоступен на оборудовании сторонних производителей: в результате Swift Crypto не предоставляет эти API.

Вторая охватывает модель распространения программного обеспечения. Чтобы разработчикам было проще обновлять Swift Crypto при их использовании на платформах, отличных от Apple, мы воспользовались диспетчером пакетов Swift для распространения Swift Crypto. Это позволяет пользователям просто вносить исправления безопасности и обновления API swift package update.

Третий вопрос совместимости. Крайне важно, чтобы пользователи могли убедиться, что результаты, полученные ими в Swift Crypto, такие же, как и в Apple CryptoKit. Просто недопустимо, чтобы одни и те же входные данные для одного и того же API давали семантически разные результаты при использовании Swift Crypto и при использовании Apple CryptoKit. С этой целью мы также организовали общий набор тестов, который гарантирует, что Swift Crypto и Apple CryptoKit должны соответствовать этим критериям.

В некоторых случаях для устранения несоответствий между проверкой, требуемой Apple CryptoKit, и проверкой, выполненной BoringSSL, потребовалась дополнительная, довольно тонкая работа. В одном или двух случаях это также требовало совершенно новых реализаций некоторых алгоритмов. Это будет оставаться основной частью работы над этим проектом в будущем, но мы посчитали жизненно важным обеспечить, чтобы пользователи могли ожидать, что все функциональные возможности, предоставляемые Apple CryptoKit, которые могут быть доступны, будут доступны в Swift Crypto.

Учитывая то, что мы проделали эту дополнительную работу, какое преимущество можно получить, имея два бэкенда вместо консолидации в один бэкэнд для CryptoKit и Swift Crypto? Основным преимуществом является проверка. Благодаря двум независимым реализациям API-интерфейса CryptoKit мы можем тестировать реализации как друг против друга, так и с их собственными наборами тестов. Это повышает надежность и совместимость для обеих реализаций, уменьшает изменения регрессии и облегчает выявление ошибок путем сравнения выходных данных двух реализаций.

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

Swift Crypto - это семантически версионный пакет Swift, доступный по лицензии Apache 2.0. Это позволяет легко и надежно использовать абсолютно везде.

Развитие Swift Crypto
Поскольку основной целью Swift Crypto является предоставление кроссплатформенного решения для использования API-интерфейсов Apple CryptoKit на более широком спектре платформ, этот API, естественно, будет следовать эволюции самого Apple CryptoKit. Тем не менее, поскольку Swift Crypto является проектом с открытым исходным кодом, есть некоторые возможности для предложения API непосредственно Swift Crypto. В зависимости от области применения этих API, они также могут рассматриваться для параллельной реализации в Apple CryptoKit.

За исключением API-интерфейсов, требующих специального оборудования, всегда будет иметь место то, что при реализации API-интерфейса Apple CryptoKit Swift Crypto будет его использовать, но когда такой API-интерфейс недоступен, будет возможность использовать Swift Crypto.
Основные API-интерфейсы будут продвигаться вместе с Apple CryptoKit, и наш набор тестов совместно с Apple CryptoKit гарантирует, что оба проекта должны пройти тестовые наборы друг друга для API, обеспечивая полную совместимость Swift Crypto и Apple CryptoKit.

Обратите внимание, однако, что важным принципом разработки Swift Crypto является то, что поддержка всех криптографических примитивов является явной не целевой задачей. Риск поддержки многих примитивов состоит в том, что пользователям становится намного труднее делать выбор, особенно безопасные. Помните об этом, если вы планируете предложить новую поверхность API: некоторые примитивы могут не поддерживаться, поскольку в проекте уже есть эквивалентные примитивы, использующие более широко развернутые или безопасные альтернативы.

Присоединяйся!
Если вы заинтересованы в любом из Swift Crypto, приходите и принимайте участие! Источник доступен , и мы приветствуем участие сообщества. Если у вас есть вопросы или вы хотели бы обсудить Swift Crypto, пожалуйста, не стесняйтесь общаться на . Если вы хотите сообщить об ошибках, воспользуйтесь трекером GitHub . Мы с нетерпением ожидаем совместной работы с вами и поможем продвинуть индустрию к лучшему, более безопасному будущему программирования.

Автор:Кори Бенфилд (Cory Benfield) входящий в группу разработчиков базовых серверных библиотек Swift в составе подразделения Apple Cloud Services и является основным разработчиком SwiftNIO.
Оригинал:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!