Приватне отримання інформації
Коротко
- Приватне отримання інформації, або PIR, дозволяє пристрою отримати один елемент із бази даних сервера так, щоб сервер не дізнався, який саме елемент було запитано
- Zcash потребує цього, тому що приватний гаманець не може запитати в сервера, які транзакції є його власними, не видавши себе
- Сьогодні гаманці завантажують і сканують значно більше даних, ніж їм потрібно, і це одна з головних причин, чому синхронізація повільна
- PIR дозволив би гаманцю приватно отримувати лише власні дані, усуваючи це вузьке місце й зберігаючи приватність
- Це активна сфера досліджень для Zcash: потужна в теорії й така, яку зараз роблять практичною для реальних гаманців
Для кого це
- Для всіх, хто замислювався, як приватний гаманець знаходить власні монети, не розкриваючи, які саме
- Для новачків, які постійно бачать згадки про PIR поруч із роботами з масштабування Zcash
- Для читачів, які спершу хочуть зрозуміти саму ідею, а вже потім криптографію під нею
Проблема, яку PIR розв'язує для Zcash
Zcash приховує, кому призначена транзакція. Така приватність створює незручне запитання: якщо мережа не може бачити, які транзакції належать вам, то як ваш власний гаманець їх знаходить?
Сьогодні відповідь досить груба. Гаманець не може запитати в сервера, які транзакції мої, бо таке запитання розкрило б саме те, що Zcash намагається приховати. Тому замість цього гаманець завантажує великий обсяг даних і локально перевіряє кожен елемент, щоб визначити, що належить йому. Це працює й зберігає приватність, але це повільно й важко. Саме це сканування є однією з головних причин, чому синхронізація гаманця може здаватися млявою.
Ідеальним було б мати спосіб, за якого гаманець міг би запросити в сервера саме свої дані й отримати їх, а сервер при цьому ніколи не дізнався б, що саме було запитано. Саме це й забезпечує приватне отримання інформації.
Що таке PIR
Приватне отримання інформації - це криптографічний метод, який дозволяє клієнту прочитати один запис із бази даних сервера, не розкриваючи серверу, який саме запис він прочитав.
Уявіть бібліотеку, де ви можете отримати саме ту книгу, яка вам потрібна, але бібліотекар так і не дізнається, яку книгу він вам видав. Ви отримуєте свій примірник, а ваш інтерес залишається приватним. PIR - це математична версія цієї ідеї, застосована до будь-якої бази даних.
Цю концепцію вивчають у криптографії вже десятиліттями. Вперше її представили у 1995 році Chor, Goldreich, Kushilevitz і Sudan, які описали підхід із кількома серверами, а перша версія для одного сервера з'явилася у 1997 році завдяки Kushilevitz і Ostrovsky. Це не те, що винайшов Zcash, а усталена галузь, яку Zcash тепер застосовує до реальної й непростої проблеми.
Як працює PIR на базовому рівні
Існує два широкі підходи до побудови PIR, і ця різниця має значення.
Перший використовує кілька серверів. Клієнт надсилає кожному з кількох серверів частину запиту, а їхні відповіді поєднує локально. Жоден окремий сервер не бачить достатньо, щоб зрозуміти, що саме було запитано. Це ефективно, але залежить від того, що сервери не змовляються між собою, а це складно гарантувати в реальному світі.
Другий використовує один сервер і хитру криптографію замість кількох сторін. Тут клієнт покладається на спеціальний інструмент, що називається гомоморфним шифруванням, і саме цей напрямок є найкориснішим для реального впровадження, бо не потребує кількох серверів, які не змовляються між собою.
Механізм: гомоморфне шифрування
Гомоморфне шифрування - це різновид шифрування, який дозволяє серверу виконувати обчислення над даними, поки вони залишаються зашифрованими. Сервер формує коректну зашифровану відповідь, так і не побачивши вихідних значень.
Ось ідея PIR для одного сервера, побудованого таким способом. Клієнт хоче отримати елемент номер три зі списку. Він формує запит, який фактично є зашифрованим так для третьої позиції й зашифрованим ні для всіх інших позицій. Для сервера цей запит - просто беззмістовний шум, він не може визначити, у якій позиції міститься це так.
Потім сервер поєднує свою базу даних із цим зашифрованим запитом, використовуючи спеціальні властивості гомоморфного шифрування: множить кожен збережений елемент на відповідне зашифроване так або ні й додає результати разом. У підсумку виходить один зашифрований пакет, який містить рівно той елемент, який хотів клієнт, і ніщо не розкриває, який саме це був елемент. Клієнт розшифровує цей пакет і читає свій елемент. Сервер відповів на запитання, так і не дізнавшись самого запитання.
Сильніша версія, яка називається symmetric PIR, додає другу гарантію: клієнт дізнається лише той елемент, який запитав, і нічого про будь-який інший запис у базі даних. Це захищає не лише клієнта, а й саму базу даних.
Трохи ближче для технічних читачів
Сучасні схеми для одного сервера будуються на ґратковій криптографії, найчастіше на припущенні learning with errors. Запит клієнта - це вектор шифротекстів, шифрування одиниці в цільовому індексі й нуля всюди в інших місцях, а саме шифрування є адитивно гомоморфним, тож сервер може додавати шифротексти й множити їх на відкриті записи бази даних без розшифрування.
Сервер розглядає базу даних як матрицю, застосовує зашифрований вектор вибору й повертає один шифротекст, який розшифровується в потрібний рядок. Оскільки запит неможливо відрізнити від випадкового шуму, сервер не отримує жодної інформації про індекс.
Історичною перешкодою завжди була вартість. У наївному варіанті сервер мусить торкнутися кожного запису в базі даних для кожного запиту, що дорого з погляду обчислень, а шифротексти мають великий розмір, що дорого з погляду пропускної здатності. Останні дослідження атакують цю проблему через попередню підготовку: схеми на кшталт SimplePIR і FrodoPIR дозволяють серверу підготувати базу даних заздалегідь і надати кожному клієнту невелику підказку, переносячи значну частину роботи в офлайн-фазу, щоб запити в реальному часі стали швидкими. Корисний додатковий ефект полягає в тому, що побудови на основі ґраток також вважаються стійкими до квантових атак, що узгоджується з ширшим рухом Zcash у бік постквантової приватності.
PIR у Zcash
PIR є частиною зусиль зробити Zcash водночас приватним і швидким у масштабі.
Ціль - вузьке місце сканування гаманця, описане раніше. Робота у Valar Group розвиває методи приватного отримання інформації, щоб гаманець міг отримувати власні дані із сервера без того, щоб сервер дізнавався, які записи були запитані. Одне конкретне застосування - приватна перевірка nullifier. Nullifier - це унікальний маркер, який публікується, коли note витрачено, і не дає витратити ті самі кошти двічі. Гаманцю часто потрібно перевірити, чи з'явився вже певний nullifier, тобто чи note усе ще не витрачено, і якщо робити це через сервер сьогодні, це може розкрити, про яку саме note йдеться. Приватне отримання інформації дозволяє гаманцю ставити це запитання, не розкриваючи, який nullifier його цікавить. Це розвивається паралельно з іншими роботами з масштабування, зокрема Project Tachyon і новим програмним забезпеченням для вузлів, спрямованими на усунення обмежень продуктивності, які сьогодні стримують приватні гаманці.
Важливо чесно сказати, на якому це етапі. Це активні дослідження й інженерна робота, а не завершена й уже впроваджена функція. Сама концепція добре усталена, і напрямок визначено, але зробити PIR достатньо ефективним для повсякденних гаманців на звичайних пристроях - це якраз та складна частина, над якою зараз працюють.
Поширені хибні уявлення
- PIR приховує, який саме елемент ви запитали, але не обов'язково приховує сам факт того, що ви взагалі зверталися до сервера; метадані мережевого рівня - це окрема проблема
- PIR не є унікальним для Zcash, це загальний криптографічний інструмент, який Zcash застосовує до приватності гаманців
- Швидша синхронізація завдяки PIR - це мета, над якою ще працюють, а не функція, яка вже є в гаманцях
- Завантаження всього й локальне сканування, тобто поточний підхід, є приватним, але повільним; PIR прагне зберегти приватність і прибрати повільність
Пов'язані сторінки