Більше 7 мільярдів людей використовують сучасний Інтернет. У цьому надзвичайно складному та величезному цифровому світі важливо забезпечити безпеку файлів. Саме тому я створив SecureSafe — простий інструмент, що поєднує Еліптичну Криву Криптографію (ECC) та Стандарт Сучасного Шифрування (AES). SecureSafe — це ще маленький і простий проєкт, який я не планую розширювати. Я використаю цей проєкт, щоб показати, як ці технології працюють разом для забезпечення безпеки ваших даних.
Ось посилання на проєкт: SecureSafe
Давайте розпочнемо!
Чому використовувати ECC та AES разом?
Коли мова йде про захист чутливих даних, шифрування є найкращим способом. Але не всі методи шифрування працюють однаково. Два з найбільш популярних методів у світі кібербезпеки — це ECC та AES. Кожен з них має свої сильні та слабкі сторони, але в комбінації вони забезпечують дуже надійне рішення для шифрування.
Основи ECC
Еліптична Крива Криптографія (Elliptic Curve Cryptography, ECC) базується на еліптичних кривих — математичних кривих, які використовуються для генерації пар ключів. Крива визначається рівнянням, подібним до цього:
y^2 = x^3 + ax + b
В ECC ми працюємо з точками на цій кривій. Кожна точка є розв'язком рівняння. Основною операцією в ECC є множення точок, що полягає в тому, що точка додається сама до себе кілька разів. Ця операція проста для виконання, але важка для зворотного вирішення, що робить ECC дуже безпечним.
Наприклад:
kP = P + P + ... + P (повторюється k разів)
Безпека ECC залежить від складності зворотного вирішення цієї проблеми множення — це називається Проблемою дискретного логарифма еліптичної кривої (ECDLP).
Як генеруються ключі в ECC
Генерація ключів в ECC передбачає два компоненти:
- Приватний ключ: випадкове число, вибране з великого діапазону.
- Публічний ключ: точка на кривій, отримана з приватного ключа.
Щоб обчислити публічний ключ:
Public Key = Private Key * Generator Point (G)
У Python це виглядає ось так:
private_key = secrets.randbelow(n - 1) + 1
public_key = scalar_multiplication(private_key, (Gx, Gy))
Приватний ключ зберігається в таємниці, а публічний ключ можна передавати іншим.
Спільний секрет: як ECC дозволяє безпечний обмін ключами
Ключова перевага ECC полягає в його здатності створювати так званий спільний секрет між двома сторонами. Тут важливо те, що спільний секрет не потрібно передавати між ними. Заплуталися?
Ось як це працює:
Аліса та Боб хочуть спілкуватися безпечно. Аліса генерує свій приватний і публічний ключі, і Боб робить те ж саме. Вони обмінюються своїми публічними ключами і використовують свої власні приватні ключі для обчислення спільного секрету. Математично обидві сторони отримають той самий спільний секрет, не передаючи його і не дозволяючи іншим його обчислити.
Цей спільний секрет можна використовувати як симетричний ключ для шифрування та дешифрування повідомлень.
Як працює AES
Стандарт Сучасного Шифрування (AES) — це симетричний алгоритм шифрування, який шифрує дані в фіксованих блоках з використанням спільного секретного ключа.
Ось як працює процес AES:
- Генерується 256-бітний ключ.
- Дані розбиваються на 128-бітні блоки.
- Кожен блок шифрується за допомогою кількох раундів заміщень та перестановок.
Для AES-256 процес шифрування проходить 14 раундів трансформацій, включаючи:
- AddRoundKey: XOR-операція даних з раундовим ключем.
- SubBytes: заміна кожного байта за допомогою попередньо визначеної таблиці.
- ShiftRows: зсув рядків масиву стану.
- MixColumns: змішування стовпців для подальшого затемнення даних.
Після цих раундів зашифровані дані готові до передачі або збереження.
Як SecureSafe поєднує ECC та AES
SecureSafe — це не сервіс для обміну повідомленнями, а система безпечного зберігання файлів.
SecureSafe використовує ECC для безпечного обміну ключами та AES для швидкого шифрування файлів. Ось як це все працює разом:
По-перше, користувач генерує пару публічних та приватних ключів за допомогою ECC.
Коли файли переміщуються в сейф, вони шифруються за допомогою AES. Сам ключ AES генерується з використанням спільного секрету, створеного за допомогою ECC. Це забезпечує, що ключ шифрування ніколи не буде розкритий, що робить його надзвичайно безпечним.
Коли файли шифруються в сейфі, відбуваються наступні кроки:
- Обмін ключами за допомогою ECC: Приватний ключ користувача та публічний ключ отримувача використовуються для обчислення спільного секрету.
- Шифрування за допомогою AES: Спільний секрет використовується для генерування 256-бітного ключа AES, який потім використовується для шифрування всіх файлів у сейфі.
Для дешифрування сейфа користувачеві потрібно просто мати свій приватний ключ, щоб знову обчислити спільний секрет і отримати ключ AES. Коли ключ AES отримано, він може дешифрувати файли.
Приклад коду: Генерація спільного секрету
Ось як ви можете отримати спільний секрет у Python:
def derive_shared_secret(private_key, public_key):
shared_point = scalar_multiplication(private_key, public_key)
shared_secret = shared_point[0] # Використовуємо x-координату як спільний секрет
return shared_secret.to_bytes(32, 'big')
Приклад коду: Шифрування AES
Наступний код Python показує, як виконати шифрування AES, використовуючи отриманий ключ:
def aes_encrypt(key, plaintext):
iv = secrets.token_bytes(16)
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
padder = PKCS7(algorithms.AES.block_size).padder()
padded_data = padder.update(plaintext) + padder.finalize() ciphertext = encryptor.update(padded_data) + encryptor.finalize()
return iv + ciphertext
Приклад коду: Дешифрування AES
Ось відповідний код для дешифрування AES:
def aes_decrypt(key, ciphertext):
iv = ciphertext[:16]
encrypted_data = ciphertext[16:]
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
decryptor = cipher.decryptor()
decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize() unpadder = PKCS7(algorithms.AES.block_size).unpadder()
unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize() return unpadded_data
Чому ця комбінація працює
Поєднання ECC та AES забезпечує як безпеку, так і ефективність. ECC займається безпечним обміном ключами, а AES забезпечує швидке шифрування великих обсягів даних. Такий гібридний підхід часто використовується в протоколах безпечного зв'язку, системах зберігання зашифрованих файлів та безпечних месенджерах.
Використовуючи ECC для генерування ключа та AES для шифрування даних, SecureSafe досягає як конфіденційності, так і високої продуктивності. Це практичне рішення, яке поєднує безпеку та зручність використання.
Останні думки
Шифрування може здаватися складним, але розуміння основ ECC та AES робить його більш доступним. SecureSafe поєднує ці технології, щоб забезпечити простий, але ефективний спосіб зберігання ваших файлів у безпеці.
Якщо ви зацікавлені в криптографії або створенні безпечних додатків, сподіваюся, цей огляд надихне вас глибше зануритися в світ шифрування.
Дякую за прочитане.
Перекладено з: Building a Secure File Encryption Tool with ECC and AES