Autor Beitrag
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mo 09.06.08 16:46 
hi

wie realisiert man die verschlüsselung von daten ?
sagen wir mal ich möchte von einem text jedes zeichen einzeln verschlüsseln. das ergebnis der verschlüsselung jedes einzelnen zeichens ist eine dezimalzahl, die je nach zeichen verschieden lang ist.
wenn ich die verschlüsselten zahlen aneinander reihe und speichere hab ich eigentlich kaum noch ne möglichkeit den text zu entschlüsseln, weil ich nicht weiß wie lang welche zahl ist...und was ich jetzt entschlüsseln soll. ich glaub man kann schlecht einfach ne dezimalfolge wie "034928721" hinter jeden verschlüsselten buchstaben hängen, da es bei der kryptoanalyse schnell auffallen würde und der verschlüsselte text soll ja sicher.
wie realisieren kryptoverfahren die interpunktion ? also dass man weiß wo ein block anfängt und wo er endet, damit man die verschlüsselung wieder rückgängig machen kann.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Mo 09.06.08 23:05 
Man benötigt für eine solche Trennung keine Interpunktion oder ähnliches, da in jeder Verschlüsselung eine Blocklänge (oder eben eine Länge von nur einem Zeichen) vorgegeben ist:

Bei symmetrischen Algorithmen sollte dies klar sein, sowohl bei Block- als auch Stromchiffren!

Bei asymterischen Algorithmen ist die "Blocklänge" anhand des Galois Feldes (GF(p)) festgelegt: { (0), 1, 2, ... , p-2, p-1 } Hierbei weiß ich nicht, was in der Praxis eingesetzt wird, weil einmal kann man p als Basis für ein Zahlensystem nehmen und einmal verwendet man die Bitlänge von p als Blöcklänge, muss dabei jedoch beachten, dass die Zahl eines Blockes nicht größer als p ist! RSA-1024 verschlüsselt somit immer 1024-bit Blöcke.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 10.06.08 19:57 
Das von dir angesprochene Verfahren produziert in der Ausgabe ja Daten in einem Format das üblicherweise nicht zum speichern von Binärdaten verwendet wird, sondern nur dann wenn die Daten ohne aufwändige Zusatzprogramme menschenlesbar sein sollen.
Im Normalfall wird bei einer Verschlüsselung aus einem Byte wieder ein Byte, oder mehrere. Die Bytes werden natürlich beim Speichern wieder als Bytes geschrieben. Wobei jedes Byte eine Speicherstelle, und nicht maximal 3, wie in deinem Beispiel einnimmt. Somit taucht das von dir angesprochene Problem nicht auf.

Eine Byte-Zahl ist ja nur in der visuellen (dezimalen) Darstellung eine Gruppe aus 1 bis 3 Ziffern [0..9]. In Hexadezimal sind es maximal 2 Ziffern [0..9, A..F]. In "ASCII" Darstellung ist es nur 1 "Ziffer" die 256 Werte hat.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Di 10.06.08 20:36 
Klar werden je nach Zahlensystem andere Längen bei der Darstellung verwendet. Was ich aber meine ist, dass angenommen man nehme für RSA ein N = 247 = 19 * 13. Dies ist eine 8-Bit Zahl, kann aber nicht alle 8 Bit Zahlen verschlüsseln, weil 255 größer ist als N und daher Kongruent zu 8 Modulo N. Daher wäre für eine Veschlüsselung von 0xFFFFFF eher das Zahlensystem der Basis N zu wählen, um nicht sechs Verschlüsselungsschritte zu benötigen sondern nur VIER!!
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mi 11.06.08 16:45 
danke für die antworten...
allerdings hab ich noch nicht herausbekommen wie ich das Galois Feld jetzt auf rsa beziehe um die blöcklänge zu berechnen...
vielleicht könnt ihr mir das an folgendem beispiel erklären...

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
public key: 743048687
private key: 488275415
modul: 1156830791

verschlüsselung:
zeichen  result
[d]      34883217
[a]      931089035
[s]      611734557
[ ]      45974888
[i]      1002716692
[s]      611734557
[t]      474573094
[ ]      45974888
[e]      701354481
[i]      1002716692
[n]      1143295374
[ ]      45974888
[t]      474573094
[e]      701354481
[s]      611734557
[t]      474573094


das sind die rsa resultate der einzelnen zeichen. da sich die zahlen für die buchstaben wiederholen möchte ich später mehrere zeichen gleichzeitig verschlüsseln. aber erstmal zum verständnis: wenn ich die resultate aneinanderreihe (34883217931089035611734557459748881002716692611734557474573094459748887013544811002716692114329537445974888474573094701354481611734557474573094) wie bekomme ich daraus wieder die einzelzeichen ? geht das überhaupt ?
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Mi 11.06.08 18:26 
Auch hierbei kann man wieder beide Methoden nutzen, jedoch bekommt man beim wiedereinlesen, sofern keine Daten manipulation statgefunden hat, auf eine Abfrage verzicheten. Ich denke das Verfahren auf einem neuen Zahlensystem kann man am Anfang einmal weglassen auch wenn es in meinen Augen am besten geeignet ist.

N ist hier eine 31-bit Zahl, jedoch zu veranschaulichng ist es besser hier 32-bit Blöcke zu verwenden, da man bei diesen weiterhin die Struktur sieht. Dann alle Eigebnisse am Anfang mit "0" auffüllen und als Hex hintereinander reihen, dann kann man später immer Blockweise (also immer 32-bit pro Schritt) einlesen und entschlüsseln!
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
[d] 0x02144691
[a] 0x377F4A8B
[s] 0x2476541D
[ ] 0x02BD8568
[i] 0x3BC43E14
[s] 0x2476541D
[t] 0x1C496926

Bei [d] und [ ] ist eine "0" vorangestellt sodass man nun alles hintereinander schreiben kann:
02144691377F4A8B2476541D02BD85683BC43E142476541D1C496926

Beim wiedereinlesen einfach immer 8 Hexzahlen auf ein mal einlesen:
02144691 377F4A8B 2476541D 02BD8568 3BC43E14 2476541D 1C496926
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mi 11.06.08 18:30 
gut dann hatte ich es ja richtig verstanden...habs allerdings nicht mit hex sondern mit ascii werten der zeichen gemacht, d.h. ich bekomme immer 3er blöcke und bei a (ascii-wert 97) stelle ich eine 0 voran.

daraus resultierte allerdings ein neue problem. vielleicht kannst du mir da auch weiter helfen:
www.delphi-forum.de/viewtopic.php?t=84089

ich meine sogar es war deine funktion, die mir schwierigkeiten macht :P
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Fr 13.06.08 13:45 
frage hat sich jetzt geklärt...

das ergebnis seht ihr hier:
www.delphi-forum.de/....php?p=507363#507363