• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak programy szyfrujące dane zabezpieczają klucz i hash?

+1 głos
85 wizyt
pytanie zadane 27 grudnia 2021 w Bezpieczeństwo, hacking przez remoh Początkujący (390 p.)
edycja 27 grudnia 2021 przez remoh

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?

komentarz 27 grudnia 2021 przez Wiciorny Ekspert (221,970 p.)
a przeczytałeś chociaż 1 artykuł, na temat hashowania i czym jest operacja "w jedną stronę"?
Klucz który używany jest do hashowania danych, nie jest typ kluczem który stosuje funkcja którą odszyfrowuje dane.
komentarz 28 grudnia 2021 przez remoh Początkujący (390 p.)
edycja 28 grudnia 2021 przez remoh
A przeczytałeś to co napisałem w poście?

Nie napisałem nic na temat odhashowania hasła tylko o odszyfrowaniu zaszyfrowanego ciągu znaków metodą AES256.

Zahashowane to ja mam hasło, którym użytkownik zabezpiecza kod QR.
A treść kodu szyfruje algorytmem AES256 za pomocą klucza, który jest zapisany jako zmienna w aplikacji.

Gdy użytkownik poda poprawne hasło to metoda deszyfrująca się włącza i deszyfruje kod QR za pomocą klucza, który jest zmienną typu String w apce.

Ja chce się dowiedzieć jak tą zmienną zabezpieczyć by nie dało się jej wyciągnąć z apki. Ciekawi mnie jak sobie z tym radzą programy do szyfrowania plików jak np. VeraCrypt. To niemożliwe by VeraCrypt trzymał klucz jako zmienną w programie bo można by było to wyciągnąć z RAMu lub wsteczną inżynierią.
komentarz 28 grudnia 2021 przez Wiciorny Ekspert (221,970 p.)
edycja 28 grudnia 2021 przez Wiciorny

To wszystko jest łatwiejsze do zrozumienia, jeśli zdasz sobie sprawę, że kody QR po prostu kodują zwykły tekst. Jeśli twój schemat jest niepewny, jeśli po prostu miałeś do czynienia z plikami tekstowymi lub tekstem wydrukowanym na ścianie - kody QR tego nie zmieniają. W kodzie QR nie ma mechanizmu zabezpieczającego.
Możesz umieścić wszystko, co chcesz w kodzie QR.

Druga sprawa -> 

Zahashowane to ja mam hasło, którym użytkownik zabezpiecza kod QR.

no to masz po prostu złą implementacje bo takiej rzeczy nie może być - nie powinieneś opierać tego, na danych użytkownika.  


I przeczytaj co napisałem klucz używany podczas deszyfrowania jest innym kluczem niż ten który szyfruje kod QR tym samym algorytmem stąd - z racjji tego, że są to operacje tylko w jedną strone i nie można ich odwrócić, bo inne funkcje za to odpowiadaja oparte o ten sam algorytm powoduje bezpieczeństwo + złożoność bitowa ... która powoduje tak ogromny czas "na złamanie", że przy skomplikowanych  hash-ach jest to czasami nie osiągalne 

komentarz 28 grudnia 2021 przez remoh Początkujący (390 p.)
edycja 28 grudnia 2021 przez remoh

To wszystko jest łatwiejsze do zrozumienia, jeśli zdasz sobie sprawę, że kody QR po prostu kodują zwykły tekst.

Naprawdę uważasz, że napisałem apkę do szyfrowania kodów QR o tym nie wiedząc? Jak niby miałbym to zrobić?

Oczywiście, że apka najpierw szyfruje tekst, a potem zmienia go na kod QR.
Jak chcę zdeszyfrować to skanuje kod QR i zamienia go na String. Ja wpisuje hasło, a apka je sprawdza i jeśli jest poprawne to włącza metodę deszyfrującą.

To jest zawartość przykładowego kodu QR:

hash:$2a$12$Xc6J8hCTmCeTOOqP2YfxSO/qC6d6zbrXVx0m.avwNbJK7Itv3YElS;
encr:cLCEzvVHfMxZUuw1U9J3nQ==

Albo masz w formie obrazu:

w hash: jest zapisany hash hasła (bcrypt), które użytkownik wpisał przy generowaniu kodu qr.
w encr: jest zaszyfrowany tekst algorytmem AES256.


Gdy użytkownik skanuje zaszyfrowany kod to jest proszony o wpisanie hasłą. Jeśli hasło zgadza się z hashem to aplikacja włącza metodę odszyfrowywania tekstu.
Metoda ta za pomocą klucza zapisanego w zmiennej KEY odszyfrowuje tekst i wyświetla go użytkownikowi.

1 odpowiedź

0 głosów
odpowiedź 27 grudnia 2021 przez Wiciorny Ekspert (221,970 p.)

Siła bezpieczeństwa funkcji haszujących

Algorytmy różnią się w największym stopniu pod względem bezpieczeństwa zapewnianego dla zaszyfrowanych danych. Siła bezpieczeństwa jest zdefiniowana w NIST SP 800-57 Pt1 Rev 4 jako „ilość pracy (to znaczy liczba operacji) wymagana do złamania algorytmu lub systemu kryptograficznego”. W celu określenia odpowiednich funkcji skrótu, które mogą być wykorzystane w aplikacji, należy wziąć pod uwagę minimalny wskaźnik siły bezpieczeństwa wraz z algorytmem, schematem lub aplikacją, w której funkcja skrótu jest używana. Poniższa tabela, zaadaptowana zNIST SP 800-57 Pt 1 Rev 4 zawiera listę zatwierdzonych funkcji skrótu, których można użyć w celu zapewnienia określonego poziomu bezpieczeństwa dla różnych aplikacji z funkcją skrótu.

Klucze są od siebie różne, hash nie jest rozczytywalny. Jeśli je zhaszujesz, nigdy nie będziesz w stanie odczytać oryginalnych wartości. 

Podobne pytania

0 głosów
1 odpowiedź 338 wizyt
pytanie zadane 25 stycznia 2019 w Systemy operacyjne, programy przez IXIXIXIXIXIXI Użytkownik (710 p.)
0 głosów
0 odpowiedzi 179 wizyt
0 głosów
3 odpowiedzi 628 wizyt
pytanie zadane 6 marca 2018 w Java przez andrut Użytkownik (870 p.)

88,330 zapytań

136,924 odpowiedzi

305,591 komentarzy

58,601 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...