Cześć,
słowem wstępu chciałem podziękować za udostępnienie tego narzędzia - bardzo fajna rzecz!
Bardzo chciałbym wykorzystywać je 'produkcyjnie' ale natknąłem się na pewien problem: przechowywanie kluczy prywatnych certifikatów do uwierztylniania i innych. Z tego co udało mi się wyczyta z kodu oraz przetestowąć, wygenerowany klucz prywatny jest przechowywany bez hasła na dysku w drzewie folderów. Mój wewnętrzny 'bezpiecznik' mocno się na krzywi ;)
Technicznie rzecz biorąć, jest to potencjalny problem w przypadku kiedy ktoś ma dostęp do dysku. Natomiast możę to być zneutrlizowane na poziomie systemu operacyjnego poprzez pełne szyfrowanie dysku. Ale szczerze powiedziawszey, myślę że można to zrobić lepiej na poziomie aplikacji.
Moje propozycje:
- szyfrowanie klucza prywatnego wygenerowanym dynamicznie hasłem przechowywanym w systemowym keyringu - najprostsze do implementacji
- przechowywanie klucza prywatnego w systemowym keyringu - mogą być problemy z wielkością klucza i miejsca w keyringu
- utworzenie klucza prywatnego na sprzętowym kluczu bezpieczeństwa poprze interfejs PKCS#11 - dużo pracy, odporne na ataki na pamięć procesu
- szyfrowanie klucza prywatnego poprzez rozszerzenie WebAuthn PRF - klucze sprzętowe implementujące FIDO2 i posiadające wsparcei dla PRF są coraz bardziej popularne
- utowrzenie klucza prywatnego na wbudowanym module TPM - obecnie TPM jest dostępny wszędzie, klucz jest przywiązany do sprzętu więc mamy to interesujący aspekt bezpieczeństwa fizycznego (dostęp do konkretnego komputera)
Osobiście uważam że najlepsze opcje to szyfrowanie hasłęm w keyringu oraz PKCS#11 ale to tylko propozycje. Użycie PKCS3!! wymaga użycia CGO i linkowania bibliotek natywnych co może być problemem dla wieloplatformowośći. Z drugiej storny, możę być to opcja ukryta za flagą podczas budowania albo można użyć kompilatora zig który pozwala na kompilację wskrośną na wiele platform bez dodatkowych narzędzi.
Chętnie poznam zdanie autora na ten temat. Jeśli będzie zielone światło to całkiem prawdopodobne że pokuszę się o zaimplementowania tych zmian.
Cześć,
słowem wstępu chciałem podziękować za udostępnienie tego narzędzia - bardzo fajna rzecz!
Bardzo chciałbym wykorzystywać je 'produkcyjnie' ale natknąłem się na pewien problem: przechowywanie kluczy prywatnych certifikatów do uwierztylniania i innych. Z tego co udało mi się wyczyta z kodu oraz przetestowąć, wygenerowany klucz prywatny jest przechowywany bez hasła na dysku w drzewie folderów. Mój wewnętrzny 'bezpiecznik' mocno się na krzywi ;)
Technicznie rzecz biorąć, jest to potencjalny problem w przypadku kiedy ktoś ma dostęp do dysku. Natomiast możę to być zneutrlizowane na poziomie systemu operacyjnego poprzez pełne szyfrowanie dysku. Ale szczerze powiedziawszey, myślę że można to zrobić lepiej na poziomie aplikacji.
Moje propozycje:
Osobiście uważam że najlepsze opcje to szyfrowanie hasłęm w keyringu oraz PKCS#11 ale to tylko propozycje. Użycie PKCS3!! wymaga użycia CGO i linkowania bibliotek natywnych co może być problemem dla wieloplatformowośći. Z drugiej storny, możę być to opcja ukryta za flagą podczas budowania albo można użyć kompilatora zig który pozwala na kompilację wskrośną na wiele platform bez dodatkowych narzędzi.
Chętnie poznam zdanie autora na ten temat. Jeśli będzie zielone światło to całkiem prawdopodobne że pokuszę się o zaimplementowania tych zmian.