В основному, детальніше описуючи те, що тут викладено .
Ось як це працює: скажімо, у нас є функція, яка приймає число від нуля до дев'яти, додає три і, якщо результат більший за десять, віднімає десять. Тож f (2) = 5, f (8) = 1 і т. Д. Тепер ми можемо зробити ще одну функцію, назвемо її f ', яка йде назад, додавши сім замість трьох. f '(5) = 2, f' (1) = 8 і т.д.
Ось приклад двосторонньої функції та її зворотної. Теоретично будь-які математичні функції, які перетворюють одне на інше, можна змінити. На практиці, однак, ви можете зробити функцію, яка настільки добре зашифровує його введення, що перетворити її неймовірно складно.
Введення та застосування односторонньої функції називається "хешуванняванням" вводу, а те, що Amazon зберігає у їхній системі, є "хеш" вашого секретного ключа. SHA1 - приклад подібної функції "односторонньої" функції, вона також загартована проти атак.
Функція HMAC будується на встановлених хеш-функціях, щоб використовувати відомий ключ для аутентифікації рядка тексту. Це працює так:
- Ви берете текст свого запиту та секретний ключ і застосовуєте функцію HMAC.
- Ви додаєте цей заголовок аутентифікації до свого запиту та надсилаєте його до Amazon.
- Amazon шукає їх копію секретного ключа та текст, який ви тільки що надіслали, і застосовує функцію HMAC.
- Якщо результат збігається, вони знають, що у вас є той самий секретний ключ.
Різниця між цим та PKI полягає в тому, що цей метод є RESTful , що дозволяє мінімальну кількість обмінів між вашою системою та серверами Amazon.
Хіба це не те саме, що запитати мене про номери моїх кредитних карт або пароль і зберігати їх у власній базі даних?
Так, хоча шкода, яку хтось може завдати S3, здається, обмежується виведенням вашого рахунку.
Наскільки секретними вони повинні бути? Ці програми, які використовують секретні ключі, зберігають його якось?
У якийсь момент вам доведеться завантажити секретний ключ, і в більшості систем на базі Unix, якщо зловмисник може отримати root-доступ, він може отримати ключ. Якщо ви шифруєте ключ, у вас повинен бути код, щоб розшифрувати його, і в якийсь момент код розшифровки повинен бути простим текстом, щоб його можна було виконати. Це та сама проблема, якою володіє DRM, за винятком того, що ви володієте комп'ютером.
У багатьох випадках я просто кладу секретні ключі у файл з обмеженими дозволами та вживаю звичайних запобіжних заходів, щоб запобігти вкоріненню моєї системи. Існує кілька хитрощів, щоб змусити його правильно працювати з багатокористувацькою системою, наприклад, уникати тимчасових файлів і подібних.