</p>
<p spaces-before="0">Це означає, що коли Боб входить в систему, щоб перевірити свої повідомлення:</p>
<ol start="1" spaces="0" level="0"> <li marker="1" level="0" spaces="0" spaces-after-marker="0">Боб отримає «беручи ключ» та цифровий підпис Аліси, зашифрований текст зашифрованого повідомлення, яке вона надіслала, та її ідентифікаційний ключ.</li> <li marker="2" level="0" spaces="0" spaces-after-marker="0">Боб перевірить, що цифровий підпис, доданий до «беручи ключ» Аліси, був підписаний за допомогою її пари ключів ідентифікації, щоб переконатися, що він справді належить їй.</li> <li marker="3" level="0" spaces="0" spaces-after-marker="0">Боб виконає операцію Діффі-Хеллмана, використовуючи приватний ключ свого «попереднього ключа» та відкритий ключ «беручи ключ» Аліси. Це надасть Бобу той самий <code>SharedSecretRoot, який створений Алісою. 4 Використовуючи ті самі функції виведення ключа, Боб знайде SharedSecretEnc
і SharedSecretMac
і використає їх для розшифрування зашифрованого повідомлення, надісланого Алісою.
Коли користувач пише повідомлення, воно форматується в кодований JSON корисний файл до початку процесу шифрування. На момент написання статті існують два типи корисних повідомлень: текстові повідомлення та вкладені файли. Повідомлення – це прості текстові повідомлення, а вкладення призначені для завантаження більших файлів, наприклад зображень або документів.
Корисне навантаження повідомлення — це проста структура JSON. Є три властивості, які повинні бути включені в кожне корисне навантаження незалежно від типу:
type
— Це може бути «повідомлення» або «вкладення». Підтримка інших типів може бути додана в майбутньому.trade_id
— унікальний ідентифікатор цієї торгівлі. Це робиться для запобігання складним атакам повторного відтворення (тобто копіювання повідомлень з інших торгів і вдавання, що вони призначені для цього).client_timestamp
— Поточна позначка часу на комп’ютері відправника (ISO 8601). Це також для виявлення складних атак відтворення, і це дозволяє арбітру викликати поганого актора, якщо він стверджує, що надіслав повідомлення пізніше або раніше, ніж реальність.Ось приклад:
{
"type": "message",
"client_timestamp": "2022-01-13T00:00:00Z",
"trade_id": "xxxx-xxxx-xxxx-xxx",
"message": "Привіт! Це моє зашифроване пов��домлення».
}
Іноді користувачі хочуть надсилати один одному вкладення, наприклад зображення та документи.
Проте включення вмісту вкладених файлів у зашифроване повідомлення може призвести до болючої роботи користувача, особливо для користувачів із поганим підключенням до Інтернету. Це означатиме, що одержувачу потрібно буде завантажити весь вкладений файл (який може становити кілька мегабайт), перш ніж він зможе навіть дізнатися, що це вкладення.
Замість цього ми розділяємо два: файл шифрується та завантажу��ться окремо, а зашифроване повідомлення просто вказує на розташування зашифрованого вкладення та інструкції щодо його розшифрування. Це дає одержувачу можливість не завантажувати вкладений файл.
Процес надсилання вкладеного файлу:
AttachmentKey
і AttachmentIv
).AttachmentKey
і AttachmentIv
.AttachmentCiphertext
генерується для захисту цілісності вкладення (AttachmentHash
).AttachmentCiphertext
у хмарне сховище та отримує унікальний ідентифікатор (AttachmentBlobKey
).AttachmentBlobKey
, AttachmentKey
, AttachmentIv
і AttachmentHash
). Вони також містять метадані, включаючи оригінальну назву файлу, розширення та розмір вкладеного файлу.Ось приклад:
{
"type": "attachment",
"client_timestamp": "2022-01-13T00:00:00Z",
"trade_id": "xxxx-xxxx-xxxx-xxx",
"attachment_blob_key": "Ключ AttachmentBlobKey",
"attachment_sha256": "Hash вкладення",
"attachment_iv": "AttachmentIv",
"attachment_key": "AttachmentKey",
"filename": "UploadedFile.jpg",
"filesize": 1000000
}
Ці корисні дані, закодовані JSON, шифруються за допомогою спільного секрету бесіди, підписуються за допомогою ключа ідентифікації облікового запису відправника та хешуються за допомогою спільного ключа MAC. Це дає змогу іншому користувачеві переконатися, що повідомлення було надіслано відправником і чи воно не було підроблено на цьому шляху.
Ось як це працює:
MessageSignature
) keccak‐256 MessagePayload
.MessageIv
).MessagePackage
), що містить MessagePayload
і MessageSignature
, що створюється.MessagePackage
шифрується за допомогою AES256-CBC до SharedSecretEnc
з IV MessageIv
і заповненням (MessageCiphertext
).MessageMac
) як HMAC-SHA256(SharedSecretMac, MessageCiphertext)
.MessageCiphertext
, MessageIv
, і MessageMac
до API, який доставляє їх одержувачу.Не існує такого поняття, як зашифрований протокол обміну повідомленнями, який міг би зробити неможливим для одержувача повідомлення поділитися ним з кимось іншим.
Ви не можете заборонити людині, якій ви надсилаєте повідомлення, ділитися вашим повідомленням, так само як ви не можете перешкодити комусь зробити знімок екрана. Якщо хтось вирішить поділитися своєю розмовою, в тому числі з нами, він може це зробити.
Коли нам потрібно розслідувати заяви про шахрайство чи зловживання, або розглядати суперечки щодо оплати, ми заохочуємо користувачів ділитися з нами вмістом розмов.
Поширення спільного секрету розмови з нами дозволяє нам повернутися назад і розшифрувати стенограму цієї конкретної розмови, однак це не впливає на конфіденційність ваших інших розмов. Це пояснюється тим, що кожна торгівля використовує унікальний набір пар ключів для отримання спільного секрету, що робить спільні секрети також унікальними.
Ми щойно розповіли вам, як захищені повідомлення на LocalCryptos. У дусі прозорості давайте також обговоримо, як вони можуть бути небезпечними.
Є деякі експерти, які виступають проти створення веб-додатків шифрування, розроблених з повагою до інтересів користувача, а не веб-провайдера, що ми і зробили. Хоча ми в кінцевому підсумку не згодні з цією загальною рекомендацією, оскільки вважаємо, що переваги переважають ризики, а веб-безпека з часом покращиться, аргументи проти використання API веб-криптографії на веб-сайтах не безпідставні.
Основним аргументом проти використання криптографії у веб-браузерах є те, що веб-програми в кінцевому підсумку менш безпечні, ніж програми та розширення браузера, коли справа доходить до доставки коду програми. Це пов’язано з принципом роботи веб-перегляду: коли ви відвідуєте цей або будь-який інший веб-сайт, ваш веб-браузер отримає останній код програми LocalCryptos безпосередньо з веб-сервера LocalCryptos і запустить його — не роблячи особливих зусиль, щоб підтвердити, що код дійсно є офіційний код LocalCryptos і не був змінений.
Ви можете подумати, що використання HTTPS вирішує цю проблему автентифікації, завдяки чому LocalCryptos може цифрово підписати код, який він надає, і ви частково праві, але лише до певної міри. Хоча HTTPS практично усуває переважну більшість теоретичних атак «людина посередині» на веб-користувачів, він не усуває загрозу, що сам веб-сервер LocalCryptos може бути скомпрометований. Розумний хакер може зламати веб-сервери LocalCryptos і обережно модифікувати один із файлів JavaScript, що доставляються кінцевим користувачам, можливо, щоб вставити кілька рядків коду для перекачування приватних ключів.
LocalCryptos робить багато, щоб мінімізувати цей ризик, використовуючи всі доступні механізми безпеки HTTP, DNS і BGP і дуже серйозно ставлячись до безпеки. Однак повністю усунути цю загрозу неможливо. Те ж саме можна сказати про буквально будь-який інший веб-сайт і веб-програму; завжди існує ймовірність того, що будь-який веб-сайт або додаток буде вразливим до дуже складної атаки. Зрештою, кібербезпека – це завжди ковзаюча шкала, яка вимагає тонкого та чесного обговорення, і кожен, хто скаже вам, що певний елемент програмного забезпечення неможливо зламати завжди неправильно.
Отже, що станеться з конфіденційністю ваших надісланих та отриманих приватних повідомлень, якщо веб-сайт LocalCryptos зазнає серйозного зламу? Це дійсно залежить. Якщо ваш веб-браузер виконує зловмисно отруєний код, введений досвідченим хакером, існує ймовірність того, що він може отримати доступ до матеріалу вашого приватного ключа та розшифрувати історію вашої розмови. Однак, якщо ваш веб-браузер не виконує гіпотетично отруєний код, ваші секретні розмови залишаться таємними, незалежно від порушення веб-сайту. Іншими словами, якщо ви відвідуєте сайт і входите в систему під час активної атаки, ви можете опинитися під загрозою; однак, якщо ви не відвідуєте веб-сайт активно під час атаки, ви не ризикуєте. Це тому, що ваш веб-браузер виконує код веб-сайту лише тоді, коли ви навмисно переходите на нього.
Для порівняння: якби централізовану службу обміну повідомленнями зламали, усі миттєво опинилися б під загрозою. Зловмисник зможе завантажити звичайний текст кожного надісланого та отриманого повідомлення, тому що кожне повідомлення буде просто зберігатися в базі даних у вигляді простого тексту. Наслідки від атаки на незашифровану службу обміну повідомленнями були б набагато більш руйнівними, ніж атака на наскрізне зашифроване веб-додаток.
Зрештою, ми вважаємо, що переваги безпеки від використання технології наскрізного шифрування на стороні клієнта значно перевищують ризик цілеспрямованої та складної атаки, і що безпека доставки додатків у веб-додатках з часом покращиться, оскільки нові технології безпеки стають доступними для сучасних браузерів.
Хоча деякі реалізації наскрізного зашифрованого обміну повідомленнями, такі як Signal, роблять оновлення ключів на крок далі завдяки угоді Діффі-Хеллмана після кожного повідомлення в обидва кінці, така практика не приносить користі LocalCryptos і насправді контрпродуктивна, оскільки ускладнює процес вирішення спорів.
Оновлення ключів на рівні повідомлень є зайвим для торгів, оскільки сесії тривають недовго. Має сенс продовжувати обмінюватися новими ключами для довготривалих розмов (наприклад, розмови у WhatsApp або Facebook, які можуть тривати роками), але більшість угод закінчуються дуже швидко.
Якщо ви ввімкнете «Експертний режим» під час розмови, ви можете натиснути на кожне повідомлення, щоб розкрити низькорівневі відомості про кожне повідомлення.
Ці деталі включають все, що ми обговорили в статті. Однак вам потрібно добре розуміти прикладну криптографію, щоб зрозуміти значення та значення цих значень.
Ви можете натиснути кожне значення, щоб скопіювати його в буфер обміну та вручну переконатися, що математика виконується — використовуючи будь-який сторонній код чи інструмент, який ви виберете, або ви можете написати власний.
Крім того, ви можете перевірити, чи це єдина інформація, яка надсилається в LocalCryptos, за допомогою інструментів розробника вашого браузера.
Michael is the co-founder and technical lead of LocalCryptos, the largest non-custodial peer-to-peer digital currency marketplace. Peer-to-peer traders use LocalCryptos to buy and sell crypto using non-custodial wallets and a secure decentralized escrow system.
Далі в Технічний:
Історія P2P торгівліКомісія смарт-контракту складає 0,25%, якщо ви розміщуєте пропозицію, або 0,75%, якщо ви відповідаєте на нього.
Все кріптовалютні транзакції також включають в себе комісію мережи, яка йде майнерам, а не нам.