Witam,
Napisałem jakiś czas temu apkę na android szyfrującą kod QR i jestem pewien, że zrobiłem to w sposób całkowicie amatorski i niebezpieczny. Zaszyfrowana wiadomość w kodzie QR wygląda tak:
hash:$2a$12$Xc6J8hCTmCeTOOqP2YfxSO/qC6d6zbrXVx0m.avwNbJK7Itv3YElS;encr:cLCEzvVHfMxZUuw1U9J3nQ==
Oczywiście $2a$12$Xc6J8hCTmCeTOOqP2YfxSO/qC6d6zbrXVx0m.avwNbJK7Itv3YElS to hash hasła, a cLCEzvVHfMxZUuw1U9J3nQ== to zaszyfrowana wiadomość algorytmem AES256, którą aplikacja odszyfruje gdy wpiszemy hasło.
Klucz zapisałem w zmiennej KEY wewnątrz programu. Zdaje sobie sprawę, że nie trzeba zaawansowanej wiedzy by tą aplikację złamać i podejrzeć ten klucz. Mając klucz i znając algorytm szyfrowania można bez problemu odszyfrować tą wiadomość bez znajomości hasła.
Dlatego chciałbym się dowiedzieć w jaki sposób zapisać klucz wewnątrz aplikacji w taki sposób by nikt nie był w stanie się do niego dostać? W jaki sposób robią to pogramy takie jak VeraCrypt?
Dodatkowo mam zaszyfrowaną partycję systemową oraz kilka magazynów na dokumenty za pomocą programu VeraCrypt i chciałbym się dowiedzieć czy jest możliwe by rozszyfrować to metodą inną niż brute force? Jeśli nie, to w jaki sposób oni przechowują klucz szyfrowania tak, by program mógł z niego korzystać, a nie był narażony na odczytanie zawartości tej zmiennej?