Proste szyfrowanie danych

0

Witam. Chciałem dane wprowadzone od użytkownika zaszyfrować (uwzględniając możliwość odszyfrowania) i zapisać gdzieś albo wysłać. W związku z tym mam dwa pytania:

  1. Jak się szyfruje? Jestem programistą hobbystą i przychodzi mi do głowy jedynie najprostsza metoda, czyli jak to się nazywa fachowo alternatywa wykluczająca :)

dane[n] = dane[n] XOR haslo[n MOD długosc_hasla]
Jak się szyfruje bardziej profesjonalnie?

  1. Czy da się jakoś zaciemnić blok kodu? Chodzi mi o to, że pewnie nie jeden użytkownik tego forum jest wstanie na podstawie skompilowanej aplikacji poznać moją jakże chytrą metodę szyfrowania ;) no i ją odwrócić. Czy da się przed tym jakoś zabezpieczyć? A jeśli nie, to jak utrudnić to zadanie i zniechęcić ewentualnego crackera (to nie są jakieś super tajne informacje, chciałem tylko stworzyć pozory bezpieczeństwa). Może jakiś paker typu UPX czy ASPack trochę pomoże?
0

np RSA
http://pl.wikipedia.org/wiki/RSA_(kryptografia)

Nie musisz przy tym w żaden sposób zabezpieczać kodu programu, metoda szyfrowania jest wszystkim znana, cały problem to znajomość pewnych liczb.

0

RSA jest szyfrem asymetrycznym (potrzebne sa 2 klucze: publiczny i prywatny) i dosc wolna (choc tutaj pewnie nie na tyle, by stanowilo to problem). Z szyfrow symetrycznych mozna polecic np. powszechnie stosowany AES, ktorego algorytm jest znany i tak jak w RSA nielamalnosc opiera sie o zlozonosc matematyczna danego problemu (jak faktoryzacja wielkich liczb czy logarytm modularny).

Nie polecany jest DES (zdecydowanie) czy 3DES, bo 1. dzisiejszymi domowymi komputerami mozna je zlamac, 2. jest ograniczony eksportowe przez USA jesli chodzi o dlugosc klucza (DES - 40b zamiast 56, 3DES, 80b zamiast 112), 3. nielamalnosc opiera sie na tajnosci algorytmu, a w zasadzie pewnych jego elementow. Popularny byl tez algorytm IDEA, ale tez podlega ograniczeniom eksportowym i jest darmowy tylko do celow niekomercyjnych.

0

A czy jest taka możliwość, że dane zaszyfrowane są kluczem A ale żeby je odszyfrować trzeba użyć innego klucza B i że nie da się odtworzyć klucza B na podstawie A i na odwrót?
Wtedy w programie byłby zapisany tylko jeden klucz. Czy istnieje coś takiego?

[dopisane]

mam przeczucie że RSA tak działa, tylko nie jestem pewien bo MD5 też jest asymetryczne a działa tylko w jedną stronę...

0

Mylisz pojecia. Szyfr asymetryczny to to czego szukasz. Masz klucz publiczny i klucz prywatny. Dane szyfruje sie jednym, odszyfrowuje drugim. Zwykle szyfrujesz publicznym, odszyfrowujesz prywatnym, mozna tez na odwrot i tak sie robi w przypadku podpisu cyfrowego (tylko Ty mozesz zaszyfrowac prywatnym, stad wiadomo, ze Ty podpisales wiadomosc). W przypadku RSA wyliczenie wiadomosci zaszyfrowanej badz jednego klucza na podstawie drugiego polega na rozlozeniu duuuzej liczby na 2 czynniki pierwsze, co jest matematycznie nietrywialnym zadaniem.

MD5 to nie szyfr a funkcja skrotu - dane sa nieodwracalnie zamieniane na pewien ciag znakow. Innymi slowy istnieja takie argumenty, dla ktorych funkcja skrotu da ten sam skrot, stad nie mozna jej odwrocic (bo nie wiadomo, ktory argument podano przy wyliczaniu skrotu).

//edit
W przypadku szyfru asymetrycznego jest taki problem, ze szyfrowanie duzej ilosci danych jest wolne, bo sam algorytm do szybkich nie nalezy. Zwykle robi sie tak, ze szyfruje sie wiadomosc szyfrem symetrycznym (bo sa szybsze), klucz z tej operacji szyfruje sie szyfrem asymetrycznym (bo to krotka wiadomosc, wiec duzo czasu nie zajmuje) i przesyla sie zaszyfrowany klucz i zaszyfrowana wiadomosc. Odbiorca odszyfrowywuje swoim kluczem prywatnym klucz wlasciwy i nim wiadomosc.

//edit2
W sumie to OT, bo w temacie bylo proste szyfrowanie :P Ale skoro takie algorytmy sa dostepne powszechnie i za darmo i nawet opensource, to nic tylko brac i korzystac :)

0

Dziękuję bardzo za odpowiedzi, teraz tylko muszę to zaprogramować w Delphi :-)
Domyślam się że pewnie było by prościej w jakimś wyższym poziomie abstrakcji jak .NET, ale jakoś nie mogę się przekonać do tego żeby zmuszać ludzi do ściągania środowiska :-/
Znalazłem bibliotekę Cryptlib, nawet przyjemna, ale plik DLL wraz z nią zajmuje 900 KB :-|
Można też znaleźć plik WinCrypt.pas do CryptoAPI tylko jakoś nie mogę wyszukać przykładu jak w tym użyć szyfrowania RSA, a może się nie da... [???]

1 użytkowników online, w tym zalogowanych: 0, gości: 1