Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jaka jest najlepsza metoda używania / przechowywania kluczy szyfrowania w MySQL?

Nie jestem pewien, czy korzystanie z wbudowanego szyfrowania MySQL byłoby najlepszym rozwiązaniem Twojego problemu.

PHP M_CRYPT pakiet jest uważany za całkiem dobry i zapewnia elastyczność w wyborze algorytmu, który najlepiej odpowiada Twoim potrzebom.

Przechowywanie klucza na innym serwerze ma jedną wielką zaletę:klucz nie znajduje się na tej samej maszynie, co zaszyfrowane dane. Tak długo, jak atakujący nie ma wystarczającej kontroli nad zhakowaną maszyną, nie może dostać się do klucza.
Jeśli atakujący uzyska pełną kontrolę nad maszyną, na której przechowywane są dane, najprawdopodobniej będzie mógł wysłać zapytanie usługa internetowa dla klucza.

Jednak przesłanie klucza z jednej maszyny do drugiej otwiera zupełnie nowy obszar, który należy zabezpieczyć. Prawdopodobnie obejmuje więcej kluczy i więcej warstw szyfrowania, co zwiększa prawdopodobieństwo popełnienia błędów.

Inną opcją jest wprowadzenie hasła podczas uruchamiania serwera WWW i przechowywanie go tylko w pamięci.

Możliwe rozwiązanie
Jeśli zobaczysz zastosowane rozwiązanie, które używa następującej metody szyfrowania plików dla użytkowników z dostępem do sieci (nie jestem pewien twojego środowiska, ale może to być pomocne):

  • Po utworzeniu użytkownika do nowego użytkownika przypisywany jest długi losowy klucz.
  • Ten losowy klucz jest przechowywany w zaszyfrowanej kolumnie w rekordzie użytkownika.
    (tylko ta kolumna jest zaszyfrowana, aby nie wpływać na wydajność reszty rekordu! )
  • Szyfrowanie kolumny z kluczem losowym odbywa się za pomocą 1 hasła głównego, przechowywanego w pliku lub w pamięci.
    (Lepszą opcją jest wprowadzenie hasła podczas uruchamiania serwera WWW i przechowywanie go tylko w pamięci. )
    (Innym podejściem byłoby pozwolenie użytkownikowi na wprowadzenie hasła i użycie go do zaszyfrowania/odszyfrowania kolumny z kluczem losowym, ale nie jestem pewien, czy to zwiększy, czy zmniejszy bezpieczeństwo )
  • Każdy dokument, który musi być zaszyfrowany, jest szyfrowany losowym kluczem dla tego użytkownika, a następnie przechowywany na dysku.
  • Dokumenty są przechowywane z minimalnymi uprawnieniami w systemie plików.

Zaletami tego podejścia są:
1. Losowy klucz jest zaszyfrowany w bazie danych. Więc nadal masz dodatkowe zabezpieczenia serwera bazy danych w połączeniu z zaszyfrowaną kolumną.2. Dokumenty są przechowywane z różnymi kluczami, jeśli atakujący zdobędzie klucz, tylko część dokumentów zostanie naruszona.

Jednak:
Jeśli atakujący zdobędzie hasło główne i ma dostęp do odczytu tabeli użytkowników, cały system jest ponownie uszkodzony.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabele, których jedynym celem jest określenie podzbioru innej tabeli

  2. mysql_fetch_assoc():podany argument nie jest prawidłowym zasobem wynikowym MySQL w php

  3. Wiele złączeń w tabeli MySQL

  4. Korzystanie z widoków MySQL

  5. Polecenie SQL do wyświetlenia i wyświetlenia wszystkich baz danych w MySQL i MariaDB