2014-06-06 14 views
6

Poszukuję "najlepszej praktyki" przydzielania pamięci dla 256-bitowych kluczy prywatnych. Zastanawiam się co najmniej, klucze nie powinny być stronicowane na dysk, i być może niektóre inne wektory ataku się martwią (a la Hearbleed). Rozwiązanie musi być przenośne dla systemów Linux i BSD.Co to jest rozsądnie bezpieczny, rozsądnie przenośny sposób przydzielania pamięci dla kluczy prywatnych?

Niektóre rzeczy Mam spojrzał na:

  • TRESOR (nie BSD-przenośne)
  • "bezpieczne hałdy" Akamai secmalloc
  • Davida Shawa
  • Zastosowanie mlock zabronić stronicowania
  • Wystarczy użyj malloc i nie martw się. Pobieżne czytanie sugeruje, że może to być właśnie to, co robi LibreSSL.

Jakieś rekomendacje?

+0

Przy okazji, jaki szyfr używasz, gdy klucze 256-bitowe oferują jakiekolwiek zabezpieczenia? –

+0

@R .. Nowoczesne szyfry symetryczne (jak AES)? Duże rozmiary, takie jak 4096-bit, są przeznaczone dla algorytmów asymetrycznych, takich jak RSA. –

+0

OP powiedział "klucze prywatne", więc założyłem krypto z kluczem publicznym, ale być może intencją było po prostu "klucze, które muszą być prywatne". –

Odpowiedz

5

Jeśli nie masz specjalnych wymagań, po prostu przy użyciu malloc jest rozsądne podejście. Ma tę zaletę, że valgrind i podobne mogą przechwytywać błędy użytkowania, które są jednym z głównych sposobów powstawania typów luk, na które możesz się martwić. Jak pokazało nam fiasko OpenSSL, próba zrobienia czegoś wymyślnego i spartaczenia jest dużym ryzykiem.

Jeśli masz bardziej wymagające wymagania, to naprawdę wiele zależy od twojego przypadku użycia. Zakładam, że twoje klucze są przejściowe, albo unikanie przechowywania ich na dysku nie ma większego sensu. Oto moje polecane zmniejszania zagrożenia dla poszczególnych ryzyk:

  • Zamiana na dysku: Jeśli Twój system wymaga zabezpieczenia przed atakami fizycznymi, nie powinno mieć w ogóle zamianę. Indywidualna próba ochrony określonych danych za pomocą mlock jest czymś w rodzaju żartu. Po prostu włącz swap off i zainstaluj wystarczającą ilość pamięci, a to nie jest problem. mlock należy uważać za funkcję planowania w czasie rzeczywistym, a nie funkcję zabezpieczeń.

  • heartbleed-podobne kwestie, umiarkowany Obrona: Przydzielanie pamięci poprzez mmap ze strony straży po obu stronach: po pierwsze mmap 2 stron więcej niż trzeba, wszystkie z PROT_NONE, a następnie użyć mprotect zrobić wszystko, ale pierwszej i ostatniej strony PROT_READ|PROT_WRITE. Uwolnij go za pomocą munmap, gdy tylko skończysz.

  • Problemy z Heartbleed, silna obrona: Rozwiąż proces potomny, aby wykonać całą kryptografię.

Powiązane problemy