Pytanie:
Pisanie własnego algorytmu szyfrowania
Confuto
2015-11-22 21:16:00 UTC
view on stackexchange narkive permalink

Obecnie studiuję informatykę na uniwersytecie (brytyjski college, inaczej uniwersytet) i praca na zajęciach nudzi mnie na śmierć. Od dłuższego czasu programuję głównie w językach OO, takich jak C # i Java, ale często się nudzę i szybko się poddaję, ponieważ większość z nich to nudne elementy interfejsu użytkownika, których nienawidzę robić, projekty, które wymyślam, rzadko mają wiele do zrobienia z projektowaniem kodu i faktycznym tworzeniem algorytmów. Chcę zacząć pisać własne algorytmy i odejść od strony przyjazności dla użytkownika i zacząć uczyć się rzeczy, które mnie interesują, a mianowicie kryptografii i kompresji. Chcę napisać własny algorytm szyfrowania, aby zaszyfrować bajty pliku lub ciągu. Mam kilka pytań:

  • Od czego mam zacząć, jakie książki / materiały są zalecane do rozpoczęcia kryptografii?
  • Czy potrzebuję rozległej wiedzy kryptograficznej, aby rozpocząć podstawowy algorytm?
  • Czy C # będzie w stanie zastosować algorytm szyfrowania w praktyce?

Każda pomoc byłaby bardzo mile widziana. Chcę zacząć pisać kod, więc jeśli chodzi o aplikowanie na uniwersytet, mam coś do pokazania dla wszystkich moich śmiałych twierdzeń dotyczących mojej aplikacji!

„Czy potrzebuję rozległej wiedzy z zakresu kryptografii, aby rozpocząć pracę z podstawowym algorytmem”? TAK. Zarówno projektowanie, jak i wdrażanie algorytmów kryptograficznych jest niezwykle trudne, wykonywane tylko przez profesjonalistów w zespołach. Baw się, co chcesz, ucz się, baw się ... ale nawet nie _ myśl_ o używaniu własnego algorytmu kryptograficznego do szyfrowania w świecie rzeczywistym.
to pytanie jest zbyt szerokie, aby można było na nie odpowiedzieć. Zaprojektowanie algorytmu szyfrowania może obejmować wszystko, od rzeczy, które mógłby zrobić uczeń szkoły podstawowej (np. Cezar-szyfra), po złożone problemy matematyczne, które doprowadzają dojrzałych matematyków do rozpaczy.
@S.L. Barth Dzięki za komentarz. Rozumiem, może najlepiej, jeśli znajdę wtedy coś innego do pracy. W ogóle nie odważyłbym się użyć niczego, co zaprojektuję w prawdziwym świecie, haha!
`Czy język C # będzie odpowiedni do wprowadzenia algorytmu szyfrowania w praktyce?` Algorytm szyfrowania SOme powinien działać niezależnie od dowolnego języka. Jeśli używasz czegoś, czego nie da się zrobić np. C, twój algorytm może zostać wyrzucony.
`Jeśli chodzi o aplikowanie na studia, mam coś do pokazania` Nie rób tego. Istnieje (zbyt) wiele sposobów na odwrócenie uwagi od algorytmu szyfrowania
C # będzie w porządku, ponieważ i tak robisz to tylko dla ćwiczeń, a zatem wydajność nie jest priorytetem (ponownie, nigdy nie powinieneś używać szyfrowania homebrew w środowisku produkcyjnym, a wydajność badziewna jest w rzeczywistości korzyścią, ponieważ będzie to odstraszać od robienia tego ).
jeśli szukasz zestawu wyzwań programistycznych związanych z kryptowalutami, polecam zajrzeć na http://cryptopals.com/
@deviantfan Nie widzę w tym problemu - krypto homebrew jest zdecydowanie nie-nie w produkcji, ale pokazanie go jako projektu hobbystycznego powinno być w porządku i przynajmniej wykazać się wiedzą programistyczną, nawet jeśli samo krypto jest złe.
Dlaczego chcesz napisać nowy algorytm? Czy istniejące są niewystarczające? Jaki konkretny problem w istniejących algorytmach spodziewasz się rozwiązać? A może po prostu chcesz to zrobić jako ćwiczenie do nauki?
@RоryMcCune Nie mogę ci wystarczająco podziękować za tę referencję. Jestem matematykiem i większość mojego doświadczenia w programowaniu pochodzi z rozwiązywania zagadek. Te zestawy problemów wydają się być zabawnym sposobem na poznanie strony implementacji algorytmów kryptograficznych!
@JamesRyan To prawda, ale uczę się jako hobby i zmuszanie się do rozpoczęcia projektu może być czasami trudne, nie mówiąc już o robieniu czegoś, czego nienawidzę. Wiem, że jeśli kiedyś uda mi się zrobić karierę, będę musiał robić nudne rzeczy, ale jeszcze nie: D
@Superbest Tak, to jest tylko ćwiczenie edukacyjne, nie spodziewam się, że będę tworzyć cokolwiek do wykorzystania przez innych. Nie spodziewam się, że rozwiążę jakiekolwiek problemy, aby być uczciwym, tylko po to, aby zdobyć trochę wiedzy na temat tego, jak działają rzeczy i rzucić sobie wyzwanie.
@Confuto W celu uczenia się ćwiczeń, dlaczego nie wypróbować bazy danych problemów online, takiej jak ProjectEuler (nie dotyczy kryptografii) lub ćwiczeń na końcu każdego rozdziału z popularnego podręcznika kryptografii?
@S.L.Barth Do zbudowania * silnego * algorytmu szyfrowania wymagana jest rozległa wiedza, ale nie w przypadku * podstawowego * algorytmu, czego chce OP. Obawiam się, że twój komentarz skłonił go do rezygnacji z wysiłku opartego na jego odpowiedzi! Myślę, że OP może łatwo napisać podstawowy algorytm szyfrowania i nauczyć się kilku przydatnych pojęć z ćwiczenia.
[„Zbudowałem własne krypto”] (https://twitter.com/old_sound/status/602996592531091456)
Kiedy przeczytałem tytuł, nie mogłem się powstrzymać od słowa „uh-oh” ...
Chłopaki, jak to jest dobrze zbadane? Jeśli wyszukasz w Google coś, co ma związek z kryptografią, jest to albo artykuł opublikowany przez boskich matematyków, albo „NIE ROBIĆ TEGO SAMEGO”. Dziwię się, że Google nie mówi po prostu „nie”, jeśli tego szukasz.
Przyszedłem tu tylko po komentarze.
Możesz także się trochę zabawić, jeśli uda ci się zebrać razem grupę początkujących programistów i rzucić im wyzwanie, aby stworzyli algorytm szyfrowania, którego żaden z pozostałych nie może złamać (co nie oznacza, że ​​jest on oczywiście niezniszczalny), a następnie złamać się nawzajem. algorytmy.
Dziewięć odpowiedzi:
fr00tyl00p
2015-11-22 22:59:12 UTC
view on stackexchange narkive permalink

Oczywiście możesz zacząć od małych i zaimplementować własne algorytmy. Ale nie zakładaj, że zapewniają one jakiekolwiek bezpieczeństwo poza zaciemnianiem .

Trudną rzeczą w przypadku kryptografii jest znalezienie powodów, dla których coś w rzeczywistości jest bezpieczne. Nie będziesz w stanie zdecydować, że w ciągu kilku miesięcy i jeśli czujesz, że jesteś w tym momencie, najprawdopodobniej się mylisz.

O wiele łatwiej jest znaleźć powody, dla których rzeczy są niepewne, niż powody, dla których są bezpieczne, więc jeśli chcesz zacząć gdzieś, opracuj własne algorytmy, aż uznasz, że są bezpieczne, a następnie spróbuj dowiedzieć się, dlaczego tak nie jest i znaleźć sposoby na ich zaatakowanie.

Większość błędów popełnia się, gdy implementacja algorytmów. Więc jeśli chcesz dostać dobrze płatną pracę, możesz nauczyć się, jak poprawnie zaimplementować te rzeczy.

Zalecałbym rozpoczęcie wdrażania czegoś takiego jak AES, a następnie przejście do różnych trybów pracy, takich jak CBC lub CCM i dowiedz się dlaczego przypadkowość jest ważna. Kontynuuj z SHA-2 i HMAC i przejdź do kryptografii asymetrycznej. Zawsze sprawdzaj, co zrobili inni i dlaczego to zrobili, i zwróć szczególną uwagę na ataki kanałem bocznym i sposób ich wykonywania. Jeśli jesteś w tym momencie, znajdziesz właściwą drogę.

Odniesieniem na początku będzie „HAC”, który jest dostępny bezpłatnie online: http://cacr.uwaterloo.ca/hac/

[Edytuj] Sugestia JRsz, której nie należy ukrywać w komentarzach. Dobra książka dla początkujących: http://crypto-textbook.com/

HAC jest świetnym tekstem referencyjnym dla tych, którzy poważnie wdrażają nową matematykę kryptograficzną, ale prawdopodobnie jest zbyt gęsty dla początkującego.
+1 za `Oczywiście możesz zacząć od małego i zaimplementować własne algorytmy. Ale nie zakładaj, że zapewniają one jakiekolwiek bezpieczeństwo poza zaciemnianiem. ”Wiele osób powtarza„ nie rób tego! ”, Ale to dobra okazja, aby dowiedzieć się więcej. To małe zastrzeżenie jest doskonałe.
Jestem bardziej niż świadomy, że wszystko, co stworzę, nie będzie użyteczne w prawdziwym świecie, to po prostu daje mi coś do nauki i do pracy.
Nie to, żebym się z tobą nie zgadzał, ale ... * „Trudną rzeczą w przypadku kryptografii jest znalezienie powodów, dla których coś jest rzeczywiście bezpieczne. Nie będziesz w stanie zdecydować w ciągu kilku miesięcy i jeśli poczujesz, że w tym momencie najprawdopodobniej się mylisz. ”* Czy ludzie wiedzą * dlaczego * algorytm taki jak RSA jest bezpieczny? O ile mi wiadomo, dzieje się tak dlatego, że nikt nie był w stanie znaleźć sposobu, aby to złamać. Dlaczego więc uczeń miałby wierzyć, że jego / jej algorytm jest gorszy?
@Mehrdad Myślę, że to po prostu dlatego, że jego / jej algorytm nie istnieje od 35 lat i nadal jest nieprzerwany.
@mbrt: Zgodnie z Twoją logiką niemożliwe jest wymyślenie bezpiecznego algorytmu szyfrowania.
@Mehrdad Powodem, dla którego RSA jest bezpieczne, jest to, że problem RSA jest trudny. Masz rację. Jest to trudne, ponieważ nikt nie znalazł sposobu, aby go złamać. Uczeń powinien wierzyć, że jego algo jest słabe, ponieważ jest to postawa obronna. IMHO jest to rozsądniejsze niż zakładanie, że ich algorytm jest bezpieczny, chyba że ktoś go złamie, ponieważ ci, którzy próbują, mogą być znacznie mniej niż ci, którzy już próbowali złamać RSA.
@fr00tyl00p: Ponownie, nie zgadzam się z twoim ogólnym przesłaniem lub wnioskiem. Nie zgadzam się z twoim założeniem, że kryptolodzy „znajdują powody, dla których [ich algorytm] jest rzeczywiście bezpieczny”. O ile mi wiadomo, tak naprawdę tego nie robią: przyczyna pojawia się po wynalezieniu algorytmu, ponieważ nie jest uszkodzony. Do tego czasu wszystko opiera się na fakcie, że po prostu mają przeczucie, że ich algorytmy powinny być bezpieczne i nie mają żadnych dowodów, że jest inaczej. Twoja odpowiedź sprawia, że ​​wygląda na to, że kryptolodzy udowodnili, że nie można ich złamać.
@Confuto Równie dobrze może być użyteczny w prawdziwym świecie w następującym sensie: żaden robot nie byłby w stanie namierzyć Cię bez nadzoru, jeśli wykonasz standardowe szyfrowanie + niestandardowe szyfrowanie (tj. Twój szyfr zostanie zepsuty tylko wtedy, gdy są prawdziwi żywi ludzie za tobą; nie zawsze jest to prawdą, gdy używasz tylko rzeczy z biblioteki, które mają tendencję do starzenia się, jak DES). To może być ważne lub nie.
@fr00tyl00p: Patrząc z perspektywy, trudno mi uwierzyć, że ESK jest rzeczywiście bezpieczny. Nie wygląda tak, jak powinno i wygląda na coś, co mógłbym wymyślić w weekend, ponieważ nie potrzebuję żadnego dowodu twardości ani niczego w ogóle, tylko przeczucie. Jedyne, czego by mi brakowało, to dobra reputacja, skłaniająca ludzi do poważnego traktowania podobnego algorytmu, ale czego innego by mi brakowało? Mógłbym po prostu stwierdzić, że to trudne i poczekać, aż ktoś mi udowodni, że się mylę. Dlaczego więc ludzie uważają ECC za bezpieczniejsze niż losowy algorytm, który mógłbym wymyślić?
hac jest bardzo skomplikowany dla początkujących. Polecam tę książkę na dobry początek: http://crypto-textbook.com/
Podoba mi się, że to zachęca użytkownika do wypróbowania go z * zarządzanymi oczekiwaniami *. Byłoby dobrym (i uważałbym za konieczne) ćwiczeniem, gdyby rówieśnicy próbowali złamać szyfrowanie.
Wybrane jako odpowiedź, dziękuję. Przytłoczony niesamowitymi odpowiedziami z tego miejsca, wielkie dzięki dla wszystkich!
@Mehrdad - kryptolodzy mają powody, by sądzić, że RSA jest bezpieczne poza tym, że „jeszcze nie jest zepsute”. Studiując podstawy matematyki, mogą udowodnić, że złamanie RSA jest bardzo trudne. Istnieją założenia (takie jak fakt, że podstawowa faktoryzacja jest powolna), ale założenia te można sformułować i określić ilościowo i są one znacznie silniejsze niż po prostu „nikt jeszcze nie znalazł hacka”. Dobra wstępna książka o kryptowalutach matematycznych powinna szczegółowo to wyjaśniać lub spróbować wyszukać np. „dlaczego RSA jest bezpieczne”.
@Rich Nie ma matematycznych ani obliczeniowych dowodów na bezpieczeństwo RSA. Założenie jest takie, że faktoryzacja zajmuje wykładniczy czas. Ale to tylko przypuszczenie, a nie dowód. Znów oznacza to w praktyce, że RSA „jeszcze się nie zepsuło” i nic więcej.
@mbrt: Nie, chodziło mi o to, że siła RSA polega na tym, że faktoryzacja nie została jeszcze zerwana, co jest o wiele silniejszym twierdzeniem niż „jeszcze nie złamano X” dla żadnego nowego szyfru X, ponieważ faktoryzacja jest znacznie lepiej zrozumiała niż X. Jak powiedziałem w mój komentarz, w grę wchodzą założenia, ale te założenia można przeliterować i określić ilościowo i są one znacznie silniejsze niż zwykłe „nikt jeszcze nie złamał szyfru nr 7 mbrta”.
@Rich: * „Mogą udowodnić, że złamanie RSA jest bardzo trudne.” * ... czy możesz połączyć mnie z tym dowodem? Wszystko na czym polega to faktoryzacja jest trudna; nie ma na to żadnego dowodu. Nie jestem pewien, czy śledzisz wiadomości, ale bardzo niedawno nastąpił rozwój quasi-wielomianowego algorytmu izomorfizmu grafów, a po usłyszeniu o tym niektórzy ludzie zaczynają się zastanawiać, czy rozkład na czynniki można rozwiązać w quasi-wielomianu- czas też. Czy możesz to samo powiedzieć o ECC? Ludzie myślą, że ESK jest trudne, ponieważ nikt też nie był w stanie go złamać. Czy jest na to dowód? Nie.
@Mehrdad: tak, wikipedia ma cytaty: „Miller wykazał, że - zakładając rozszerzoną hipotezę Riemanna - znalezienie d z n i e jest tak trudne, jak faktorowanie” przez https://en.wikipedia.org/wiki/RSA_(cryptosystem)# Integer_factorization_and_RSA_problem. Jak wspomniałem wcześniej, kryptolodzy przedstawili swoje założenia: tj. Rozszerzoną hipotezę Riemanna i trudną faktoryzację podstawową, a następnie udowodnili, że RSA jest bezpieczny przy tych założeniach. Chodzi mi o to, że te założenia są znacznie lepiej zrozumiałe i bardziej prawdopodobne, że będą prawdziwe niż jakiekolwiek stare twierdzenie „ale X nie jest jeszcze złamane”.
@Rich: A co z ESK? Ponadto, jeśli określisz swoje założenia, nie zwiększy to bezpieczeństwa algorytmu. Potrafię wymyślić algorytm i przedstawić również moje założenia. Czy to oznacza, że ​​jest teraz bezpieczny? Czuję, że nie rozumiesz o co mi chodzi ...
@Mehrdad: Myślę, że mnie nie rozumiesz. Nie powiedziałem, że istnieje dowód na to, że RSA jest „bezpieczny”. Powiedziałem, że istnieje dowód, że RSA jest bezpieczny, biorąc pod uwagę pewne dobrze zrozumiane założenia. Próbuję odpowiedzieć na Twoje początkowe pytanie „dlaczego student miałby wierzyć, że jego / jej algorytm jest gorszy [niż RSA]” - dzieje się tak dlatego, że założenia użyte w tych dowodach są bardzo mocne i znacznie silniejsze niż tylko niejasne twierdzenie ” nikt jeszcze nie złamał kryptowaluty ucznia X ”.
„jeśli określisz swoje założenia, co nie czyni algorytmu bardziej bezpiecznym” - tak, jeśli Twoje założenia są mocne i * udowodnisz * związek między swoimi założeniami a bezpieczeństwem algorytmu
@Rich: (1) Założenie, że faktoring jest trudny, jest „mocne” tylko dlatego, że nikt nie był w stanie go złamać. Dlaczego to oznacza, że ​​nowe założenie, nad którym nikt nie pracował, jest słabe? (2) Jakie jest założenie, które przeczy sile ESK? Ciągle unikasz odpowiedzi na to pytanie.
Pozwól nam [kontynuować tę dyskusję na czacie] (http://chat.stackexchange.com/rooms/32069/discussion-between-rich-and-mehrdad).
Budowanie własnego algorytmu szyfrowania bez wystarczającej wiedzy matematycznej / cs / kryptograficznej nie nazywa się * szyfrowaniem *, ale * en-crap -ation *. Lepiej niż próbować uczyć się poprzez implementację algorytmu, powinieneś nauczyć się więcej matematyki (głębokie i trudne tematy matematyczne) oraz CS, a także ponownie zaimplementować już istniejące algorytmy i zbadać ich słabe punkty.
StackzOfZtuff
2015-11-22 22:56:30 UTC
view on stackexchange narkive permalink

Coursera

Oto moje 2 centy:

Dołącz do internetowego kursu Coursera Cryptography:

Zajęcia trwają sześć tygodni. W każdym tygodniu dostępnych jest kilka filmów z wykładami, oceniany quiz i opcjonalne zadanie programistyczne. (A te zadania obejmują implementację części kryptograficznych.)

Pod koniec sześciu tygodni jest test.

Jeśli chcesz, aby ktoś rzucił wyzwanie, to jest to właściwy sposób udać się. To dużo pracy. Proponuję zaplanować ponad 10 godzin w tygodniu. Więcej, jeśli chcesz również wykonać zadanie programistyczne.

( Edycja: Oto spis treści dla poprzedniego uruchomienia tej klasy. )

Wyjaśnienie: Zadania programistyczne mają na celu tylko pogłębić zrozumienie tematu. Nie są one wyraźnie czymś, co masz następnie wypuścić na wolność.
Wręcz przeciwnie: wiadomość „Nigdy nie wdrażaj tego samemu!” jest powtarzana wielokrotnie. (I bez zbytniego rozdawania: za każdym razem, gdy „Po prostu zaimplementuj to sam!” na jednym z testów wielokrotnego wyboru, oznacza to, że jest źle).

Zapomniałem o Coursera, dzięki! Jestem subskrybentem Lynda.com, ale nie mają zbyt wiele na kryptowalutach.
+1 w klasie. To dość trudne. Zwróć uwagę, że przypisania programistyczne znajdują się w C.
Właściwie każdy język się nada. Przesyłane są tylko wyniki. Nie implementacja. Na forach są implementacje w różnych językach. Przykłady są jednak w Pythonie2.
Adam Shostack
2015-11-22 23:17:53 UTC
view on stackexchange narkive permalink

Zacznij od niszczenia, a nie budowania własnego. Istnieje niepokojąco duża liczba postów wymiany stosów napisanych przez ludzi, którzy napisali własne algorytmy. Rozejrzyj się i dowiedz się, co jest z nimi nie tak. (Nie patrz na opublikowane odpowiedzi.) [Dobre wyszukiwania obejmują „Czy to bezpieczne” i „Co jest nie tak z tym algorytmem”.]

Tylko w przypadku znalezienia problemów w pracy innych osób należy przejdź do próby wdrożenia algorytmów innych ludzi. (Komentarz @ stackzofztuff na temat Coursera nie jest zły - jeśli dobrze pamiętam, Dan Boneh zaczyna w ten sposób, z większą strukturą niż szturchanie tutaj.)

* Rozejrzyj się * Czy możesz wyjaśnić, jak znaleźć te posty? Czy musimy filtrować pytania według tagów, stron internetowych itp.?
@A.L, myślę, że wyszukiwanie według wielu tagów byłoby najbardziej efektywne. Coś w rodzaju [kryptografia + algorytm] (http://security.stackexchange.com/questions/tagged/cryptography+algorithm) lub [szyfrowanie + algorytm] (http://security.stackexchange.com/questions/tagged/encryption+algorithm ). Będziesz musiał trochę poszperać, ale na pierwszy rzut oka widzę kilka pytań. Chociaż są one w dużej mierze zakopane pod mniejszymi rzeczami, takimi jak algorytmy mieszania lub małe zaciemnienia dodane do istniejącego algorytmu. Wiele rzeczy, które nie poprawiają bezpieczeństwa ani go nie osłabiają. Nie zgadzam się z Adamem Shostackiem, że jest to skuteczne.
Szukałem hasła „Czy to bezpieczne” i uważam, że pierwsze 5 pytań to dobre miejsce na rozpoczęcie; Zredagowałem moją odpowiedź, aby była bardziej wyraźna.
dr_
2015-11-23 15:56:01 UTC
view on stackexchange narkive permalink

Kryptografia stosowana Bruce'a Schneiera to lektura obowiązkowa, jeśli chcesz zacząć studiować tę dziedzinę. Dziwię się, że nikt wcześniej tego nie zasugerował.

I tak, musisz dużo wiedzieć o kryptowalutach, nawet zanim spróbujesz stworzyć własne algorytmy dla zabawy. Jednak nawet nie myśl o używaniu ich do rozwiązywania problemów w świecie rzeczywistym - istnieje już wiele złych kryptowalut.

Jeśli chodzi o programowanie, unikaj języków zastrzeżonych, takich jak plaga. Sugerowałbym C lub nawet C ++.

Dlaczego mówisz * „Jeśli chodzi o programowanie, unikaj zastrzeżonych języków, takich jak zaraza” *? Z mojego doświadczenia wynika, że ​​kod można dość łatwo przekonwertować na C / C ++ (często prawie identyczny, wiersz po wierszu), jeśli piszesz zoptymalizowany kod w C # (choć niewiele osób to robi…). Ponadto kompilator C # jest teraz open source (wydany w ramach Apache 2.0).
C # zawsze był również publicznie dokumentowany jako standard, za pośrednictwem ECMA, jeśli dobrze pamiętam (i jest to standard, którego oczekuje się od kompilatora Microsoftu).
+1 za książkę Bruce'a Schneiera.
@Toothbrush W takim razie dlaczego nie używać bezpośrednio C, które jest otwarte, dojrzałe i szeroko rozpowszechnione.
@dr01 Oczywiście, jeśli piszesz poważny algorytm szyfrowania, zdecydowanie powinieneś napisać go w C, aby można go było formalnie przejrzeć. Jeśli jednak po prostu podrzucasz jakiś kod, aby zrozumieć, na czym polega szyfrowanie, dlaczego nie użyć języka, z którym najbardziej Ci odpowiada? Jeśli jedynymi ludźmi, którzy to zobaczą, będą on i jego kot, to jaką różnicę robi, jeśli jest napisane w AutoLisp! Może Applescript powróci i stanie się nowym standardem szyfrowania ...;)
@dr01 Kiedy uczysz się czegoś bardziej ogólnego niż określony język, przydatne jest, jeśli używany język nie daje naładowanej broni, przekręć ją i przyklej taśmą klejącą na talii, wskazując na stopę. Język, którego podstawowym pojęciem jest „niezdefiniowane zachowanie”, nie nadaje się do uczenia się o algorytmach. Chociaż C ma wiele rzeczy do zrobienia i ma swoje miejsce, wymaga specjalistycznej wiedzy, która jest całkowicie niezwiązana z algorytmami uczenia się.
I zawsze pamiętaj o zasadzie Schneiera ... Każdy może stworzyć naprawdę niesamowity algorytm szyfrowania, którego nie może złamać. tj. ... wzajemna ocena jest konieczna, aby udowodnić, że faktycznie działa.
Scott C Wilson
2015-11-22 21:36:27 UTC
view on stackexchange narkive permalink

Na dobry początek warto wdrożyć istniejące algorytmy i dokładnie poznać ich działanie. Na przykład jednorazowy algorytm padów jest łatwy do nauczenia się i wdrożenia, a badanie jego mocnych i słabych stron pomoże Ci zacząć. Pozwoli ci to również poczuć się komfortowo z rodzajem przekręcania bitów, które są ważne w kryptografii. Aby rozpocząć, wyszukanie hasła „jednorazowy pad”.

Ale zauważ, że ontimepad jest "dziwny" (algorytm i możliwe użycie), nie pomoże zbytnio w zrozumieniu AES itp., Który jest znacznie częściej używany w praktyce i ma wiele koncepcji, które można znaleźć również w innych algorytmach (itd itd.)
kwestią, która byłaby istotna dla OP w zakresie algorytmów szyfrowania, zwykle nie jest implementowana logika, ale matematyka, która za nią stoi. AES jest na to dobrym przykładem. W kodzie widać tylko kilka prostych przesunięć bitowych i niskopoziomowych instrukcji matematycznych. Sam algorytm jest zaprojektowany w taki sposób, aby zaszyfrowane dane wyglądały na czysto losowe, co wymaga co najmniej sporej umiejętności od projektanta.
Ciekawym przypadkiem jest jednak jednorazowa podkładka - to dość prosty algorytm, aw optymalnych warunkach - niezniszczalny. Jego słabości wynikają ze skalowalności i wymiany kluczy, które nie są trywialne w przypadku aplikacji „rzeczywistych”. Ale nie wiem, że to naprawdę pomaga zrozumieć inne opcje kryptograficzne, które są znacznie bardziej skomplikowane w wyniku konieczności radzenia sobie z zaufaniem, wymianą kluczy itp.
Michael B
2015-11-24 03:47:41 UTC
view on stackexchange narkive permalink

Tylko po to, by zebrać świetne odpowiedzi, które są tutaj, z czegoś z innego punktu widzenia.

Jeśli założysz, że twój algorytm v1 będzie niezabezpieczony i okropny, a twój v100 będzie tylko nieznacznie lepszy, ale równie niepewny. (podobnie jak Twoja wersja 1000)

Mając to na uwadze, możesz się wiele nauczyć rozwiązując problemy, które kryptografia musiała rozwiązać, aby stać się nauką, jaką jest dzisiaj. czyli odkrywanie koła na nowo.

Osobiście uważam, że odkrycie koła na nowo to doskonały sposób na naukę złożonego zadania. Daje ci coś do rozwiązania. Jeśli tak jest, jest mniej rzeczy, które są trudniejsze do rozwiązania niż kryptografia.

W ten sposób możesz pójść na uniwersytet i powiedzieć: cóż, projektowałem własny algorytm kryptograficzny jako narzędzie do nauki rozwiązywania trudnych problemów. W wersji 50 algorytm jest do niczego, ale to są lekcje, których się nauczyłem, rozwiązania, które znalazłem, i tak można je rozwiązać w prawdziwym świecie.

Istnieje duża różnica między stwierdzeniem, że napisałem „dobry” protokół kryptograficzny, a stwierdzeniem, że napisałem protokół, który jest prawie na pewno bardzo słaby, ale celem nie było stworzenie bezpiecznego protokołu. Osobiście miałbym duży szacunek dla kogoś, kto powiedział to drugie. (Prawdopodobnie skinę głową w stronę pierwszego - i szybko pokażę mu drzwi)

To. OP szuka ciekawego wyzwania - szansy na naukę, a nie po to, aby zostać wynalazcą Next Big Thing.
JRsz
2015-11-23 02:42:30 UTC
view on stackexchange narkive permalink

Możesz zaimplementować już istniejące algorytmy szyfrowania, ale zaprojektowanie własnego algorytmu szyfrowania jest jedną z najbardziej złożonych kwestii, z którymi możesz sobie poradzić. Ogólne wprowadzenie gorąco polecam ten kanał: https://www.youtube. com / channel / UC1usFRN4LCMcfIV7UjHNuQg / videos lub książka „Understanding Cryptography” autorstwa Christopha Paara i Jana Pelzla ( http://crypto-textbook.com/). Zakładam, że celujesz w algorytmy symetryczne i radziłbym, abyście zaczęli czytać wiele teorii na ich temat, co jest bezpieczne, a co jest niebezpieczne (historyk) i wyraźnie, w jaki sposób aktualne algorytmy osiągnęły swój stan (jak opracowano AES, itp.).

Napotkasz wiele problemów matematycznych, gdy będziesz zajmować się różnymi modelami atakujących, nawet w części symetrycznej. Kryptografia asymetryczna opiera się głównie na problemach matematycznych i istnieje kilka bardzo trudnych ataków, które są bardzo potężne przeciwko kryptografii asymetrycznej.

Podsumowując, nie rozwijaj własnych algorytmów, chyba że masz wieloletnie doświadczenie i jesteś bardzo dobrze zna temat (wszystkie jego części). Mimo wszystko zaimplementowanie kilku z nich jest dobrym pomysłem, ale jeśli szukasz jakiegoś projektu, dlaczego nie napisać programu, który używa już istniejących algorytmów i odszyfrowuje za Ciebie niektóre dane. Będziesz mieć wystarczająco dużo problemów, aby sobie z tym poradzić, ponieważ bezpieczny algorytm w ogóle nie gwarantuje bezpiecznego szyfrowania. Różne tryby pracy będą ważne w tej sprawie, a także w kilku innych kwestiach.

Count Iblis
2015-11-23 12:25:57 UTC
view on stackexchange narkive permalink

Możesz podążać za sugestią Scotta Wilsona dotyczącą jednorazowego padu, ale z prawdziwymi losowymi danymi. Możesz np. weź pod uwagę hałas z kamery internetowej komputera. Pozwól kamerze internetowej zrobić kilka zdjęć statycznej sceny, przekonwertuj je na 32-bitowe obrazy zmiennoprzecinkowe, znormalizuj obrazy do tej samej jasności, zbierz średnią, a następnie odejmij jedno ze zdjęć od średniej. Jeśli odwzorujesz ujemne wartości pikseli na 0 i dodatnie wartości pikseli na 1, otrzymasz prawie całkowicie losowe bity, które są nieskorelowane, gdy piksele nie są zbyt blisko. Zastosowanie algorytmu von Neumanna do par bitów pobranych z odległych pikseli:

(0,1) ---> 0

(1,0) ---> 1

(0,0) i (1,1) są odrzucane

dadzą idealne losowe bity, gdzie 0 i 1 mają dokładnie 50% prawdopodobieństwa.

Nie jestem pewien, czy to odpowiada na pytanie
Łatwe źródło losowości z komputera. Dziękuję Ci!
Hanky Panky
2015-11-23 13:15:40 UTC
view on stackexchange narkive permalink

Śmiało, napisz algorytm, ale na koniec daj zadanie jednemu ze swoich przyjaciół / kolegów, którzy regularnie zajmują się kryptografią; powiedz im, aby złamali szyfrowanie, jeśli to możliwe.

Zauważysz, że będą w stanie je złamać w ciągu kilku minut i będziesz oszołomiony, myśląc o tym, ile było luk, które dały gra przeznaczona dla ludzi z rozległą wiedzą kryptograficzną (aby zapytać o twoje słowa)

Dokładnie to mi się przydarzyło, kiedy uczyłem się programować dawno temu i chciałem rzucić wyzwanie niektórym facetom którzy byli sprytni w takich rzeczach i zawiodłem żałośnie. Do tego stopnia, że ​​mogliby nawet odszyfrować wiadomość wydrukowaną na papierze, używając tylko swojego umysłu i umiejętności.

Z pewnością możesz napisać taką wiadomość i udoskonalić ją w czasie, ale w żadnym wypadku nie da się jej zabezpieczyć w najbliższym czasie przed ludzi z tą wiedzą.

To będzie dobry punkt wyjścia (a może nawet punkt końcowy) w Twoim dążeniu do napisania własnego algorytmu :)



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 3.0, w ramach której jest rozpowszechniana.
Loading...