Pytanie:
Jaki byłby rozmiar klucza dla obrazu używanego jako klucz?
Daniel Esteban Ladino Torres
2018-11-06 02:52:11 UTC
view on stackexchange narkive permalink

Pracuję nad kryptosystemem, który używa kolorowych obrazów jako kluczy do szyfrowania. Próbuję odgadnąć, jaki jest rozmiar klucza mojego systemu kryptograficznego, aby stwierdzić wykonalność ataku siłowego. Mój system kryptograficzny wykorzystuje obrazy RGB o dowolnym rozmiarze M x N.

Obraz jest również generowany przez chaotyczny atraktor, który jest wrażliwy na wartości początkowe, więc każdy wygenerowany obraz jest inny. Poniższe zdjęcia są przykładem:

colourful generated images

Nie znalazłem jeszcze artykułu, który próbuje wykonać te same obliczenia. Masz jakiś pomysł, jaki jest rozmiar klucza?

Dlaczego miałbyś chcieć użyć obrazu jako klucza szyfrowania?
Twoje zdjęcia M x N w RGB byłyby użyteczną miarą tylko wtedy, gdyby każdy piksel był generowany losowo, co oczywiście nie ma miejsca, biorąc pod uwagę wszystkie ładne gradienty na powyższych zdjęciach.Zamiast tego powinieneś wspomnieć lub połączyć algorytm użyty do ich wygenerowania, abyśmy mogli poznać rzeczywiste źródło użytej entropii.
W komentarzu do odpowiedzi napisałeś: „w zasadzie obraz zostanie wygenerowany przez obu użytkowników, biorąc pod uwagę warunek początkowy, wciąż myślę o tym, jak zabezpieczyć tę wymianę”.Jeśli obraz jest generowany przez ** obu użytkowników **, muszą mieć już jakąś wspólną wiedzę.Podnosicie tutaj więcej czerwonych flag.Zdjęcia są naprawdę fajne, ale fajność nie poprawia bezpieczeństwa kryptosystemu.:)
A zdjęcia mają wzory.NIE chcesz mieć wzorów w swoich kluczach kryptograficznych.
Zgadzam się z Andersem, dlaczego miałbyś kiedykolwiek spojrzeć na klucz innej osoby lub pokazać swój komuś innemu?Wizualny aspekt klucza wcale nie jest atrakcyjny.Jak myślisz, dlaczego klucze do drzwi nie zmieniły wyglądu na przestrzeni lat?Ponieważ nikogo to nie obchodzi, to tylko kij w dziurze.
@insidesin Klucze do drzwi zmieniły się dramatycznie na przestrzeni lat.Od [starożytnych rzymskich kluczy] (http://www.sadighgallery.com/assets/images/30000/35780.jpg) do [średniowiecznych kluczy] (https://is.gd/dHJjoV) do [XX-wiecznych mosiężnych kluczy](https://www.vandykes.com/images/xl/206677.jpg) (nadal w użyciu w Anglii) do [nowoczesnych prostych kluczy] (https://www.ddlc.co.uk/storage/app/media/single-key.jpg) na klucze elektroniczne.Spacerując po starym angielskim mieście, często można zobaczyć drzwi z zamkami 3–4 generacji (a więc i kluczami).
Podanie trójwymiarowego * obiektu * jako klucza może być interesujące, ale obraz to tylko obraz (a twoje przykłady mają wiele wzorów).Dlaczego obraz musi być rozpoznawalny?Dlaczego nie wizualna reprezentacja prawdziwego i kryptograficznie bezpiecznego klucza?
@insidesin Zobacz na przykład [Historia klucza] (http://www.slate.com/articles/arts/design/2012/05/the_evolution_of_everyday_objects_the_key_the_book_the_phone_and_more_.html).
Czy Twój system faktycznie używa obrazów jako klucza, czy też używa parametrów wejściowych generatora jako klucza?Co się stanie, jeśli podasz mu zdjęcie, które nie zostało wygenerowane w ten sposób?(System generowania obrazów taki jak ten może być lepszy do weryfikacji odcisków palców a la randomart / bubble-bełkot, niż jako klucz)
@Random832 System używa go jako klucza, w rzeczywistości system obsługuje piksele wygenerowanego obrazu z obrazem, który szyfruję.Jeśli dasz mu zdjęcie, które nie zostało wygenerowane w ten sposób, nadal będzie działać, ale chodzi o to, aby ograniczyć je do obrazów generowanych przez atraktor.
@schroeder nie musi być rozpoznawalny, mój system obsługuje piksele oryginalnego obrazu i kluczowe piksele do szyfrowania informacji, szyfruję tylko multimedia.
@gerrit tak, to potwierdza mój punkt widzenia.
@gerrit Nie, mylisz się, w ogóle nie zmienili projektu.Mają i zawsze będą dekorowanym patykiem z podkładem na końcu ...
Oprócz wszystkich innych wymienionych problemów, wygenerowanie czegoś w 3D z pewną entropią, a następnie spłaszczenie tego do 2D może mieć nieprzewidywalny wpływ na entropię.(Możesz otrzymać ten sam obraz 2D z wielu różnych kształtów 3D).
Co najmniej jeden komercyjny system oprogramowania już używa obrazów jako kluczy rejestracyjnych produktu, ale nie wiem nic o steganografii, która zawiera kod bezpieczeństwa w obrazie.Same obrazy wyglądają podobnie do karty kredytowej, a niezabezpieczone informacje (nazwisko właściciela itp.) Są wyraźnie widoczne.http://ploguearia.pairserver.com/faq/index.php?solution_id=1097 Atak brutalnej siły na obraz o rozdzielczości 476x308 pikseli, kiedy nie masz pojęcia, czego szukasz na obrazie, wydaje się niewykonalny, chyba żerealizacja była naprawdę „intelektualnym wyzwaniem”).
Sześć odpowiedzi:
Blender
2018-11-06 06:10:07 UTC
view on stackexchange narkive permalink

Twoja ostatnia edycja wskazuje, że obrazy są generowane proceduralnie, dlatego rozmiar klucza będzie ograniczony stanem wymaganym do wygenerowania obrazu. Twój wydaje się być sparametryzowany przez cztery zmienne dla warunków początkowych (i stałego rozmiaru obrazu wyjściowego, lokalizacji kamery, położenia światła punktowego, warunków zbieżności itp.).

Te 128-bitowe of state zostanie następnie przekształcony w obraz przez algorytm, który zależy wyłącznie od dostarczonego stanu, więc „klucz” obrazu nie może zawierać więcej niż 128 bitów informacji. W rzeczywistości uważam, że całe klasy wartości początkowych dają identyczne wyniki (np. Gdy wszystkie cztery zmiennoprzecinkowe są bardzo małe), więc rozmiar "klucza" obrazu będzie ściśle mniejszy niż 128 bitów.

Jest naprawdę nie ma korzyści z dotykania 128 bitów stanu przez przekształcenie go w obraz (a następnie w jakiś sposób z powrotem), jeśli tylko zmniejszysz rozmiar klucza w ten sposób.

* „... jeśli tylko w ten sposób zmniejszysz rozmiar klucza”. * Może warto podkreślić, że będzie on * zawsze * zmniejszał w ten sposób rozmiar klucza.
@Wildcard Nie zmniejszy rozmiaru klucza wtedy i tylko wtedy, gdy funkcja generowania obrazu jest iniekcyjna.
To.Ponadto klucz z grubsza 65 kB nie jest zbyt przydatny (chyba że sam obraz miałby być użyty jako OTP, co byłoby _ najbardziej nierozsądne_, biorąc pod uwagę, jak to działa), więc obraz musiałby zostać przetworzony, aby uzyskać ... cokolwiek,128 lub 256 bitowy klucz (również w celu uwzględnienia artefaktów kompresji lub brakujących części / przycinania, co nie jest rzadkością w przypadku obrazów).To jest _ strasznie dużo_ przetwarzania, miejsce na błędy i mniej więcej zerowy zysk netto w porównaniu z samym „kluczem”.
Istnieje potencjalnie pewna korzyść z odwzorowania przestrzeni stanów $ [1, \ ldots, 2 ^ {128}] $ bijektywnie do jakiegoś $ A \ podzbioru B $, gdzie $ | B |>> | A | $ i $ B $ są znane (powiedzmy, wszystkie obrazy 256x256), ale $ A $ nie.Na przykład może być niewykonalne bezpośrednie iterowanie $ A $, a jeśli bijekcja jest powolna, iteracja $ A $ byłaby wolna.Ale obrazy prawdopodobnie nie są najlepszym sposobem, aby to zrobić - wystarczyłoby powtórzenie powolnego skrótu.
AndrolGenhald
2018-11-06 03:13:18 UTC
view on stackexchange narkive permalink

Obraz jest o wiele za duży, aby użyć go bezpośrednio jako klucza szyfrowania, najpierw należy go przepuścić przez KDF.

Zależy to również całkowicie od obrazu czy będzie miał wystarczającą entropię, aby była użyteczna. Możesz mieć obraz 1000 x 1000, który jest jednolicie biały, ale byłby bezużyteczny jako klucz, ponieważ nie zawiera entropii. Obrazy z kamer mają zwykle sporą liczbę entropii w dolnych bitach, więc może to być w porządku, ale użytkownicy powinni zrozumieć, że nie każdy obraz jest dobrym kluczem.

Obrazy jako klucze ogólnie nie jest to świetny pomysł. Zdjęcia są zwykle pobierane w celu udostępnienia, a klucze to coś, czego nie chcesz nikomu pokazywać. Używanie obrazu jako klucza również wydaje mi się, że może polegać na bezpieczeństwie poprzez zaciemnienie (tj. Po prostu używasz obrazu z tysięcy, które masz na swoim komputerze, ale to w rzeczywistości bardzo niska entropia, prawdopodobnie poniżej 20 bitów, chyba że masz szaloną liczbę zdjęć).

Możesz kontynuować rozwijanie tego w celu uczenia się, ale dopóki nie będziesz lepiej rozumieć kryptografii, lepiej zostaw takie rzeczy do ekspertów (zobacz Dlaczego nie powinniśmy tworzyć własnych?).

Rozumiem, moja wina, że nie wspomniałem, jakiego rodzaju obrazu używam jako klucza, w rzeczywistości używam obrazów 3D wygenerowanych z chaotycznego atraktora, takiego jak zestaw quaternion julia.
@DanielEstebanLadinoTorres: To tak niska entropia, jak ilość entropii, która jest wprowadzana do twojego procesu generowania, która prawdopodobnie jest zbyt niska, aby być bezpiecznym.
@DanielEstebanLadinoTorres Domyślam się, że nie w pełni rozumiesz, co naprawdę oznacza entropia.Naucz się tego najpierw, a potem spróbuj zrozumieć, dlaczego ludzie odradzają ci używanie zdjęć.Zdjęcia są ** fajne **, tak, ale ** nie nadają się do szyfrowania **.Musisz zrozumieć, dlaczego.
@DanielEstebanLadinoTorres Chaotyczny atraktor nie generuje entropii i nadal jest procesem deterministycznym.Chaotyczny atraktor może być użyteczny tylko wtedy, gdy stan początkowy jest całkowicie przypadkowy.
Mike Ounsworth
2018-11-06 03:05:52 UTC
view on stackexchange narkive permalink

Każdy system kryptograficzny powinien mieć klucze o rozmiarach kluczy na poziomach bezpieczeństwa 128, 192 i 256 bitów entropii.

Wraca więc pytanie: gdzie są te obrazy, z których pochodzą i ile zawierają entropii? Jeśli są to całkowicie losowe strumienie bitów, które są interpretowane jako obraz, to (ignorując utratę entropii spowodowaną stratnymi kodekami kompresji), otrzymasz log_base2 (256x256x256) = 24 bity entropii na piksel , więc d potrzebuję odpowiednio 6/8/11 pikseli dla 128/192/256 bitowych zabezpieczeń.

Jeśli nie generujesz całkowicie losowych obrazów i zamiast tego pozwalasz ludziom używać, na przykład, zdjęć, to mam nie mam pojęcia, jak w ogóle zacząłbyś szacować wielkość entropii w jednym z nich.


Konkluzja: używanie obrazów jako materiału kluczowego wydaje się być naprawdę dziwną rzeczą rób i koliduje z powszechną praktyką, zgodnie z którą materiał klucza to całkowicie przypadkowe dane z RNG o sile kryptograficznej.

Ponadto z informacji w pytaniu nie jestem przekonany, że brutalna siła jest trzeba się martwić; Bardziej interesowałbym się atakiem „uzyskaj dostęp do ich laptopa i wypróbuj każdy obraz na ich dysku twardym”.

Moja wina, używam zestawów quaternion julia do generowania obrazu, ponieważ są one wrażliwe na warunki początkowe.Więc obrazy są jak kształty 3D
@DanielEstebanLadinoTorres Nie mam pojęcia, co to oznacza w kategoriach entropii.Połączyć?
Ounsorth tutaj jest przykładem: https://www.cs.cmu.edu/~kmcrane/Projects/QuaternionJulia/teaser.png https://www.cs.cmu.edu/~kmcrane/Projects/QuaternionJulia/
@DanielEstebanLadinoTorres Hmm, jak silne są twoje umiejętności statystyczne?Pytanie tutaj brzmi po prostu "Średnio, ile trzeba wygenerować, zanim otrzymasz dwa identyczne?"Gdy już wiesz, jak to oszacować, możesz dowolnie dostosować rozmiar obrazu, złożoność kształtu itp., Aby bezpiecznie wygenerować 2 ^ 128/2 ^ 192/2 ^ 256, zanim wystąpi kolizja, i sąbrak możliwych do wykorzystania skrótów, z których może skorzystać osoba atakująca, aby zmniejszyć liczbę domysłów.
Cóż, moje umiejętności statystyczne są po prostu średnie, ale rozumiem twój punkt widzenia, będę o tym pamiętać, teraz skupię się tylko na entropii chaotycznego atraktora.Dzięki za pomoc!
@DanielEstebanLadinoTorres „teraz skupię się tylko na entropii chaotycznego atraktora” - wygląda na to, że nie rozumiesz.Jeśli twój atraktor generuje obraz na podstawie 3 losowych bajtów, masz najwyżej 24 bity entropii.Każda usterka atraktora, która uczyniłaby wynik w pewnym stopniu przewidywalnym, może tylko pogorszyć sytuację, nigdy nie poprawić.Tak więc ZAWSZE lepiej jest po prostu przekazać początkowe wartości losowe do dobrze przetestowanego algorytmu kryptograficznego.Ładne zdjęcia, ale złe użytkowanie ich trochę dewaluuje.
@IMil Co powstrzymuje atakującego przed utworzeniem dokładnie tego samego obrazu, który zrobiłeś i używaniem go do odszyfrowania wiadomości?
Robyn
2018-11-06 06:15:47 UTC
view on stackexchange narkive permalink

Na podstawie obrazów mogę stwierdzić, że rozmiar klucza jest znacznie mniejszy niż rozmiar obrazów (ponieważ w przeciwnym razie większość z nich wyglądałaby jak statyczne elementy w losowych kolorach).

Rozmiar klucza jest mniejszy niż lub równy logarytmowi o podstawie 2 z całkowitej liczby różnych obrazów, które twój chaotyczny program atraktora może wygenerować. *

To inny sposób na powiedzenie, że rozmiar klucza jest mniejszy lub równy (prawdopodobnie mniejszy) bitów potrzebnych do określenia wszystkich danych wejściowych do programu chaotycznego atraktora.

Jeśli haszujesz obraz i używasz hasha jako klucza kryptograficznego, rozmiar twojego klucza jest równy lub mniejszy niż rozmiar skrótu .

* To twój dokładny rozmiar klucza, jeśli twój algorytm szyfrowania to coś w rodzaju „XOR każdego bitu obrazu z odpowiednim bitem tekstu jawnego” (nie używaj tego algorytmu do ważnych tajemnic, przy okazji, ponieważ części wiadomości zakryte szarymi obszarami na obrazach mogą być bardzo łatwe do odszyfrowania).

Nat
2018-11-08 21:43:59 UTC
view on stackexchange narkive permalink

tl; dr - Proponujesz algorytm rozciągania klucza, który zamienia 128 bitów danych wejściowych na znacznie większy klucz. Nie jest to tak dobre, jak po prostu użycie znacznie większego klucza o tym samym rozmiarze, chociaż nie jest koniecznie tak słaby, jak 128-bitowe dane wejściowe. To powiedziawszy, Twoja mapa bitowa wygląda na bardzo uporządkowaną, co zdecydowanie sugeruje, że jest znacznie słabsza niż losowo generowana mapa bitowa.


Zgodnie z odpowiedzią @ Blender, po prostu używasz 128 bitów do wygenerowania obrazu. Domyślam się, że chcesz, aby sam obraz liczył się jako klucz większy niż 128 bitów, które wstawiłeś do algorytmu, który go wygenerował. I może.

Konkretnie rzecz biorąc, próbujesz stworzyć algorytm rozciągania klucza, który próbuje rozciągnąć 128 bitów danych wejściowych do znacznie większy klucz. Niekoniecznie jest to bezowocne, ale jest kilka rzeczy, o których należy pamiętać:

  1. Algorytm rozciągania klucza może być podatny na brutalną siłę wejścia. Na przykład, nawet jeśli ktoś nie mógł wykonać inżynierii wstecznej algorytmu generowania obrazu, mógłby wypróbować wszystkie 2 $ ^ {128} $ możliwe dane wejściowe, aby wygenerować wszystkie możliwe 2 $ ^ {128} $ możliwe obrazy, a następnie spróbować każdego. Aby temu zapobiec, musisz upewnić się, że algorytm generowania obrazu jest zbyt drogi, aby taki atak był możliwy.

  2. Twoje zdjęcie nie wygląda na przypadkowe w lokalnym waga. Oznacza to, że każdy, kto patrzy na kilka pikseli, prawdopodobnie odgadnie sąsiednie piksele z lepszymi niż przypadkowe szansami powodzenia. Oznacza to, że algorytm nie jest pseudolosowy, nawet przeciwko napastnikowi, który nie może wykonać inżynierii wstecznej algorytmu generowania obrazu.

  3. Twój obraz nie wygląda na przypadkowy skalę globalną. Oznacza to, że wyświetlane kształty mają globalną geometrię, a obrazy marnują piksele na dobrze zachowanym tle. To ponownie znacznie osłabia pseudolosowość, co może sugerować, że może być łatwo całkowicie złamać.

  4. Algorytm rozciągania klucza generujący obraz nie ma żadnej realnej korzyści w porównaniu z jakąkolwiek inną reprezentacją tych samych danych. Owszem, rozciągnięty klawisz wygląda ładnie jak obrazek, ale ta uroda odzwierciedla jedynie jego słabość w porównaniu z losowo generowaną bitmapą.

Ta witryna wydaje się generować losowe czarno-białe mapy bitowe o określonych wymiarach. Na przykład, oto mapa bitowa piksela 250 $ \ razy 250 $:
.
Ta mapa bitowa jest (powinna być) losowa, ponieważ atakujący patrzy na dowolną kombinację jego pikseli nie powinno mieć większych niż równe szans na odgadnięcie, jaki może być inny piksel.


Ile entropii?

Niestety ta strona nie ma MathJax włączone, więc trudno jest bezpośrednio odpowiedzieć na pytanie, aby nie wyglądało dziwnie. Tutaj napiszę odpowiedź tak, jakby MathJax był dostępny.

Zestaw losowo wygenerowanych obrazów RGB o danej długości i szerokości zawiera $$ {\ left (n_ \ text {Red} \ , n_ \ text {Green} \, n_ \ text {Blue} \ right)} ^ {n_ \ text {szerokość} \, n_ \ text {wysokość}} \, \ text {Members} \ ,, $$ gdzie:

  • $ n_ \ text {Red} $ to liczba możliwych wartości wymiaru „ czerwony ” piksela;

  • $ n_ \ text {Zielony} $ to liczba możliwych wartości wymiaru „ zielonego ” piksela;

  • $ n_ \ text {Blue} $ to liczba możliwych wartości wymiaru „ niebieski ” piksela;

  • $ n_ \ text {width} $ jest liczbą pikseli na szerokości; a

  • $ n_ \ text {length} $ to liczba pikseli długości.

Wtedy od entropii to $ \ log_2 {\ left (n_ \ text {Members} \ right)}, $ to byłoby $$ \ begin {align} \ left [\ text {entropy} \ right] & ~ = ~ \ log_2 { \ left ({\ left (n_ \ text {czerwony} \, n_ \ text {zielony} \, n_ \ text {niebieski} \ prawo)} ^ {n_ \ text {szerokość} \, n_ \ text {wysokość}} \ right)} \ [5px] & ~ = ~ {n_ \ text {szerokość} \, n_ \ text {wysokość}} \, \ log_2 {\ left (n_ \ text {czerwony} \, n_ \ text {zielony} \, n_ \ text {Blue} \ right)} \,. \ end {align} $$

W przypadku obrazu czarno-białego:

  • $ n_ \ text {Red} = 2, $ ponieważ są dwa możliwe wartości dla kanału czerwonego;

  • $ n_ \ text {Green} = n_ \ text {Blue} = 1, $ ponieważ zdefiniowane są wartości kanałów zielonego i niebieskiego aby wyrównać kanał czerwony (tak, że wszystkie piksele są czarne lub białe;

więc entropia byłaby $$ \ left [\ text {entropy} \ right] ~ = ~ {n_ \ text {szerokość} \, n_ \ text {wysokość}} \, \ log_2 {\ left (2 \ times 1 \ times 1 \ right)} ~ = ~ {n_ \ text {szerokość} \, n_ \ text {wysokość}} \,. $$

Joshua
2018-11-08 06:21:10 UTC
view on stackexchange narkive permalink

Tak więc, jeśli uda ci się ominąć początkowe problemy związane ze zbyt małym rozmiarem klucza i zbyt dużą utratą, a następnie użyjesz KDF, w końcu użycie tych kluczy do autoryzacji jest korzystne.

Generowanie tych rzeczy musi trwać wiecznie w porównaniu z tradycyjnym hashem, więc jeśli początkowe parametry są traktowane jak hasło, czas ataku na hasło będzie długi.

Ale są na to łatwiejsze sposoby. bcrypt () i znajomi dobrze się skalują.

To nie daje odpowiedzi na pytanie.Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem.- [Z recenzji] (/ review / low-quality-posts / 127636)
Uważałem, że czas potrzebny na generowanie jest potencjalnie dodający „efektywną entropię”, ale dzieje się tak tylko wtedy, gdy nie ma wydajniejszego sposobu generowania obrazu.Wymagałoby to więcej badań przed użyciem w kryptografii i oczywiście, jak wspomniałeś, Argon2 lub bcrypt i tak byłyby lepsze.
@Vilican Nikt jeszcze nie wspomniał o bcrypt i znajomych.Wycofam swoją na lepszą.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...