На Swift.org разработчики языка объявили о выпуске нового пакета Swift с открытым исходным кодом для гомоморфного шифрования в Swift.
Гомоморфное шифрование — это криптографическая техника, которая позволяет производить вычисления на зашифрованных данных, не раскрывая операционному процессу лежащие в их основе незашифрованные данные. Она позволяет клиентам отправлять зашифрованные данные на сервер, который обрабатывает эти зашифрованные данные и возвращает результат, который клиент может расшифровать. Во время выполнения запроса сам сервер никогда не расшифровывает исходные данные и даже не имеет доступа к ключу дешифрования. Такой подход открывает новые возможности для работы облачных сервисов, обеспечивая конфиденциальность и безопасность данных пользователя, что, безусловно, очень привлекательно для многих сценариев.
В Apple используют гомоморфное шифрование в своей работе, поэтому они рады поделиться этой Swift-реализацией с сообществом, чтобы другие могли использовать ее и вносить свой вклад.
Одним из примеров использования этой реализации в iOS 18 является новая функция Live Caller ID Lookup, которая предоставляет услуги определения номера абонента и блокировки спама. Live Caller ID Lookup использует гомоморфное шифрование для отправки зашифрованного запроса на сервер, который может предоставить информацию о телефонном номере без того, чтобы сервер знал конкретный номер телефона, указанный в запросе. Чтобы продемонстрировать это, разработчики выложили пример, который предоставляет функциональный бэкенд для тестирования функции Live Caller ID Lookup с использованием гомоморфного шифрования.
Вот еще самый простой пример использования библиотеки:
import HomomorphicEncryption // We start by choosing some encryption parameters for the Bfv<UInt64> scheme. // *These encryption parameters are insecure, suitable for testing only.* let encryptParams = try EncryptionParameters<Bfv<UInt64>>(from: .insecure_n_8_logq_5x18_logt_5) // Perform pre-computation for HE computation with these parameters. let context = try Context(encryptionParameters: encryptParams) // We encode N values using coefficient encoding. let values: [UInt64] = [8, 5, 12, 12, 15, 0, 8, 5] let plaintext: Bfv<UInt64>.CoeffPlaintext = try context.encode( values: values, format: .coefficient) // We generate a secret key and use it to encrypt the plaintext. let secretKey = try context.generateSecretKey() let ciphertext = try plaintext.encrypt(using: secretKey) // Decrypting the plaintext yields the original values. let decrypted = try ciphertext.decrypt(using: secretKey) let decoded: [UInt64] = try decrypted.decode(format: .coefficient) precondition(decoded == values)
Саму библиотеку для шифрования вы можете найти на GitHub: https://github.com/apple/swift-homomorphic-encryption