Надсилання повідомлень через iMessage є популярним способом спілкування між пристроями iOS і комп’ютерами Mac. Сервери Apple щодня обробляють десятки мільйонів повідомлень, і в міру того, як зростають продажі пристроїв Apple, зростає популярність iMessage. Але чи замислювалися ви коли-небудь про те, як ваші повідомлення захищені від потенційних зловмисників?
Apple нещодавно випустила dokument опис безпеки iOS. Він чудово описує механізми безпеки, які використовуються в iOS – систему, шифрування та захист даних, безпеку програм, мережевий зв’язок, Інтернет-сервіси та безпеку пристрою. Якщо ви трохи розумієтеся на безпеці та не маєте проблем з англійською, ви можете знайти iMessage на сторінці номер 20. Якщо ні, я спробую якомога чіткіше описати принцип безпеки iMessage.
Основою відправки повідомлень є їх шифрування. Для неспеціалістів це часто асоціюється з процедурою, коли ви шифруєте повідомлення ключем, а одержувач розшифровує його цим ключем. Такий ключ називається симетричним. Критичним моментом у цьому процесі є передача ключа одержувачу. Якщо зловмисник отримав його, він міг просто розшифрувати ваші повідомлення та видати себе за одержувача. Для спрощення уявіть собі ящик із замком, в який поміщається лише один ключ, і цим ключем можна вставляти та витягувати вміст ящика.
На щастя, існує асиметрична криптографія з використанням двох ключів - відкритого і закритого. Принцип полягає в тому, що кожен може знати ваш відкритий ключ, звичайно, тільки ви знаєте свій закритий ключ. Якщо хтось хоче надіслати вам повідомлення, він зашифрує його за допомогою вашого відкритого ключа. Тоді зашифроване повідомлення можна буде розшифрувати лише за допомогою вашого закритого ключа. Якщо ще раз уявити поштову скриньку спрощено, то цього разу вона матиме два замки. За допомогою відкритого ключа будь-хто може розблокувати його, щоб вставити вміст, але вибрати його можете лише ви зі своїм закритим ключем. Для впевненості додам, що повідомлення, зашифроване відкритим ключем, не можна розшифрувати цим відкритим ключем.
Як працює безпека в iMessage:
- Коли iMessage активовано, на пристрої генеруються дві пари ключів – 1280b RSA для шифрування даних і 256b ECDSA для перевірки того, що дані не були підроблені під час передачі.
- Два відкритих ключа надсилаються до Apple Directory Service (IDS). Звичайно, два закриті ключі зберігаються лише на пристрої.
- В IDS відкриті ключі пов’язані з вашим номером телефону, електронною поштою та адресою пристрою в службі Apple Push Notification (APN).
- Якщо хтось хоче надіслати вам повідомлення, його пристрій дізнається ваш відкритий ключ (або кілька відкритих ключів, якщо iMessage використовується на кількох пристроях) і адреси APN ваших пристроїв у IDS.
- Він шифрує повідомлення за допомогою 128b AES і підписує його своїм закритим ключем. Якщо повідомлення має надійти до вас на кількох пристроях, воно зберігається та шифрується на серверах Apple окремо для кожного з них.
- Деякі дані, як-от мітки часу, взагалі не зашифровані.
- Весь зв'язок здійснюється через TLS.
- Довші повідомлення та вкладення шифруються за допомогою випадкового ключа в iCloud. Кожен такий об’єкт має власний URI (адресу чогось на сервері).
- Коли повідомлення буде доставлено на всі ваші пристрої, воно буде видалено. Якщо він не доставлений хоча б на один із ваших пристроїв, він залишається на серверах протягом 7 днів, а потім видаляється.
Цей опис може здатися вам складним, але якщо ви подивіться на картинку вище, ви напевно зрозумієте принцип. Перевагою такої системи безпеки є те, що її можна атакувати ззовні лише грубою силою. Ну, поки що, бо зловмисники стають розумнішими.
Потенційна загроза полягає в самій Apple. Це пояснюється тим, що він керує всією інфраструктурою ключів, тож теоретично він міг би призначити інший пристрій (ще одну пару відкритого та закритого ключів) вашому обліковому запису, наприклад, за рішенням суду, на якому вхідні повідомлення можна було б розшифровувати. Однак тут Apple заявила, що не робить і не буде робити нічого подібного.
А перед ким це зашифровано? Чи буде недостатньо звичайного SSL, повідомлення надсилається до apple, а потім apple надсилає повідомлення знову через SSL? У Apple все одно є можливість підслуховувати повідомлення, то чому весь шум навколо? У будь-якому випадку, це лише питання запобігання третім сторонам від прослуховування повідомлення, і для цього достатньо SSL.
Якщо ми вважаємо, що Apple не надсилає приватні ключі, то він також не читатиме їх. І в будь-якому випадку, SSL – це лише реалізація асиметричного шифрування підключення клієнт-сервер.
Таким чином, ми надсилаємо повідомлення 2 рази зашифроване через SSL, і Apple може його прочитати, або 2 рази незашифроване з тим фактом, що ми запитуємо відкриті ключі заздалегідь і використовуємо той самий шифр, що й у випадку SSL, і Apple не може прочитати їх теоретично.
І чому дані зашифровані навіть в Apple? Тому що якийсь співробітник точно матиме до них доступ. Його зрадила дівчина, тож він почав завантажувати її повідомлення – вони витікають, і Apple має проблеми.
Смішний крик..