Sign in Join
Wiki copytemporary

DCPcrypt/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11### Allgemeines
22
33- [DCPcrypt](http://www.cityinthesky.co.uk/opensource/dcpcrypt/) ist eine Sammlung cryptographischer Komponenten für Lazarus.
44
55- Die Idee hinter DCPcrypt ist, daß es möglich sein muß, per "drop in" jegliche Algorithmen und deren Implementierung einfach gegeneinander auszutauschen, nur mit minimalen Codeänderungen.
66
77Diese Ziel vor Augen sind alle kryptographischen Komponenten von einer, aus einer Reihe von mehreren, Basisklassen abgeleitet, TDCP_cipher für Verschlüsselungsalgorithmen und TDCP_hash für Hash-algorithmen.
88
99- Seit der v2.0.4-Release, unterstützt DCPcrypt auch 64-Bit-Systeme.
1010
1111**Status**: Production/Stable\
1212**Letzte Version**: v2.0.4.1
1313
1414### Screenshot
1515
16-- <figure>
17- <img src="Dcp1.png" title="Dcp1.png" />
18- <figcaption>Dcp1.png</figcaption>
19- </figure>
16+- ![](/wiki-images/b/be/Dcp1.png)
2017
21-- <figure>
22- <img src="Dcp2.png" title="Dcp2.png" />
23- <figcaption>Dcp2.png</figcaption>
24- </figure>
18+- ![](/wiki-images/7/74/Dcp2.png)
2519
2620### Autor
2721
2822- David Barton [home page](http://www.cityinthesky.co.uk)
2923
3024#### Beitragende
3125
3226- Portierung nach FPC/Lazarus von [barko](http://wiki.freepascal.org/User:Barko) - 2006
3327- [Graeme Geldenhuys](http://geldenhuys.co.uk) - 2009 (aktueller Bearbeiter)
3428
3529### Lizenz (eng.)
3630
3731The MIT License
3832
3933Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4034
4135The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
4236
4337THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
4438
4539### Download
4640
4741Die letzte 'stable release' kann auf [Lazarus-CCR Files](http://sourceforge.net/projects/lazarus-ccr/files/DCPcrypt/) heruntergeladen werden.
4842
4943### Abhängigkeiten / Systemerfordernisse
5044
5145Seit v2.0.4 lässt es sich mit FPC 2.4.1 (und höher) kompilieren und ist unter 32-bit & 64-bit Linux und 32-bit Windows getestet.
5246
5347### Quelltext
5448
5549Seit März 2010, wird der DCPCrypt-Quellcode als Teil des [Lazarus-CCR Projekt](http://sourceforge.net/projects/lazarus-ccr/) auf SourceForge.net gehostet.
5650
5751DCPCrypt steht in einem [Git](http://git-scm.com)-Repository bereit. Um den letzten Stand des Quelltexts aus dem Archiv zu die folgenden Befehle in der Kommandozeile ausführen.
5852
5953` git clone `[`git://lazarus-ccr.git.sourceforge.net/gitroot/lazarus-ccr/dcpcrypt`](git://lazarus-ccr.git.sourceforge.net/gitroot/lazarus-ccr/dcpcrypt)
6054
6155` git clone http://git.code.sf.net/p/lazarus-ccr/dcpcrypt lazarus-ccr-dcpcrypt`
6256
6357Dannach führt man weitere Updates durch mit:
6458
6559` git pull`
6660
6761### Installation
6862
6963Seit dem v2.0.4-Release ist DCPCrypt in zwei Pakete aufgeteilt:
7064
7165dcpcrypt.lpk
7266Dies ist ein Nur-Laufzeit-Paket und nur den GUI-unbelasteten Kern-Code. Man kann diese Packet für Konsolen-Programme und andere nicht-LCL Projekte (z.B: für fpGUI oder MSEgui basierende Projekte).
7367
7468dcpcrypt_laz.lpk
7569Dies ist das Design-Packet das die diversen Komponenten in der Lazarus IDE registriert und in der entsprechenden Palette zur Verfügung stellt.
7670
7771Um DCPCrypt mit der Lazarus IDE zum ersten zu Mal benutzen:
7872
7973- In **Package \> Package-Datei (.lpk) öffnen**, dcpcrypt.lpk öffnen und **Kompilieren** drücken.
8074- Um die DCPCrypt-Komponenten in der Lazarus-IDE Komponentenleiste zu haben, muß man noch dcpcrypt_laz.lpk öffnen (s.o.), dann **Kompilieren** drücken und dann **Nutzung... \> Installieren** auswählen und ggf. den Dialog bestätigen. Die Lazarus-IDE kompiliert sich nun selbst (mit der gewählten Komponente).
8175- Warten bis der kompilieren-Vorgang beendet ist (i.d.R: beendet sich die IDE selbst), und danach die Lazarus-IDE neu starten. DCPCrypt steht nun bereit.
8276
8377### Nutzung
8478
8579Es ist zu beachten daß ein grundsätzliches Verständniss der Prinzipien hinter der Ver-/Entschlüsselung und Schlüssel-Verwaltung die Voraussetzung für die Benutzung der in diesem Paket implementierten Chiffren ist.\
8680Eine gute Einführung zu diesem Thema bietet "Angewandte Kryptographie" \<rev\>Bruce Schneier ,[<ISBN:3-8273-7228-3>](https://de.wikipedia.org/wiki/Angewandte_Kryptographie)\</rev\>, siehe auch die NIST-Puplikation SP800-38A mit Information über die Verkettungsarten von Block-Chiffren.
8781
8882- Chiffren - Der Grundbaustein von DCPcrypt ist die TDCP_cipher-Komponente.
8983- Blockchiffren - Die Basis aller blockchiffren ist die TDCP_blockcipher-Komponente.
9084- Hashs - Die Grundlage aller hash(Prüfsummen)-Algorithmen ist die TDCP_hash-Komponente.
9185
9286Siehe auch die beigefügte Dokumentation.
9387
9488#### Verschlüsselung mit Klar(-text)schlüsseln
9589
9690Normalerweise wird in DCPcrypt beim verschlüsseln davon ausgegangen, daß der Schlüssel "gehasht" wird wenn er mit *.InitStr* übergeben wird.\
9791Man kann allerdings auch einen Klartext-String mit *[.Init](http://is.muni.cz/th/51468/fi_b/priloha/DCPcrypt/Docs/Ciphers.html#Init)* übergeben, z.B. so:
9892
9993``` pascal
10094var s:string;
10195begin
10296 s:='1234567890ABCDEF1234567890ABCDEF';
10397 DCP_3des1.Init(s[1],length(s)*8,nil);
10498```
10599
106100Quelle: [Forumsbeitrag](http://lazarus.freepascal.org/index.php/topic,18108.msg101683.html#msg101683).
107101
108102### Bekannte Fehler
109103
110104Bei der Benutzung von [[DCPrijndael]] ist darauf zu achten, daß Schlüssellängen ausserhalb des [[AES]]-standart dafür bekannt sind Schlüssel-Schemata zu erzeugen, so daß der Datenaustausch mit anderen Implementationen von Rijndael **nicht** unproblematisch ist. Nur wenige dieser Implementationen bieten überhaupt die Möglichkeit nicht-standartisierte Schlüssel- oder Blocklängen zu verarbeiten. [Brian Gladman](https://web.archive.org/web/20090201173123/http://fp.gladman.plus.com/cryptography_technology/rijndael/) and [Jeffrey Clement](https://web.archive.org/web/20110826031605/http://jclement.ca/software/pyrijndael/) bieten beispielsweise Implementationen (in C und Python) an, von denen bekannt ist, daß sie bei solchen Schlüssellängen mit [[DCPrijndael]] inkompatible Ergebnisse produzieren. Das beigefügte, kommentierte Testprogramm (unten) zeigt das zu erwartende Ergebnis:
111105
112106``` pascal
113107program ctst;
114108{$mode objfpc}{$H+}
115109uses
116110 {$IFDEF UNIX}{$IFDEF UseCThreads}
117111 cthreads,
118112 {$ENDIF}{$ENDIF}
119113 Sysutils, DCPrijndael;
120114const
121115 InData: array[0..15] of byte =
122116 ($32,$43,$f6,$a8,$88,$5a,$30,$8d,$31,$31,$98,$a2,$e0,$37,$07,$34);
123117 Key1: array[0..19] of byte =
124118 ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,$ab,$f7,$15,$88,$09,$cf,$4f,$3c,$76,$2e,$71,$60);
125119 Key2: array[0..31] of byte =
126120 ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,$ab,$f7,$15,$88,$09,$cf,$4f,$3c,$76,$2e,$71,$60,
127121 $f3,$8b,$4d,$a5,$6a,$78,$4d,$90,$45,$19,$0c,$fe);
128122 OutData1: array[0..15] of byte =
129123 ($23,$1d,$84,$46,$39,$b3,$1b,$41,$22,$11,$cf,$e9,$37,$12,$b8,$80);
130124 OutData2: array[0..15] of byte =
131125 ($1a,$6e,$6c,$2c,$66,$2e,$7d,$a6,$50,$1f,$fb,$62,$bc,$9e,$93,$f3);
132126var
133127 Cipher: TDCP_rijndael;
134128 Block: array[0..15] of byte;
135129begin
136130// lengths: block = 16 bytes, key = 20 bytes
137131// key = 2b7e151628aed2a6abf7158809cf4f3c762e7160
138132// input = 3243f6a8885a308d313198a2e0370734
139133// encrypt = 231d844639b31b412211cfe93712b880
140134// decrypt = 3243f6a8885a308d313198a2e0370734
141135 Cipher := TDCP_rijndael.Create(nil);
142136 Cipher.Init(Key1, Sizeof(Key1) * 8, nil);
143137 Cipher.EncryptECB(InData, Block);
144138 writeln('128-bit block & 160-bit key results:');
145139 writeln(boolean(CompareMem(@Block, @OutData1, 16)));
146140 Cipher.DecryptECB(Block, Block);
147141 writeln(boolean(CompareMem(@Block, @InData, 16)));
148142 Cipher.Free;
149143// lengths: block = 16 bytes, key = 32 bytes
150144// key = 2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe
151145// input = 3243f6a8885a308d313198a2e0370734
152146// encrypt = 1a6e6c2c662e7da6501ffb62bc9e93f3
153147// decrypt = 3243f6a8885a308d313198a2e0370734
154148 Cipher := TDCP_rijndael.Create(nil);
155149 Cipher.Init(Key2, Sizeof(Key2) * 8, nil);
156150 Cipher.EncryptECB(InData, Block);
157151 writeln('128-bit block & 256-bit key results:');
158152 writeln(boolean(CompareMem(@Block, @OutData2, 16)));
159153 Cipher.DecryptECB(Block, Block);
160154 writeln(boolean(CompareMem(@Block, @InData, 16)));
161155 Cipher.Free;
162156end.
163157```
164158
165159Die Ausgaben die Freepascal 2.2.0 erzeugt sind:
166160
167161` 128-bit block & 160-bit key results:`\
168162` FALSE`\
169163` TRUE`\
170164` 128-bit block & 256-bit key results:`\
171165` TRUE`\
172166` TRUE`
173167
174168Das bedeutet, daß bei der Benutzung von 160-bit Schlüsseln die Chiffre nur mit [[DCPrijndael]] wieder entschlüsselt werden kann, jedoch nicht mit anderen Implementationen. Andererseits funktioniert dies mit 256-bittigen Schlüsseln. Der 160-bit-Fall ist deswegen so wichtig, da SHA-1 eine genau 160-bit-Prüfsumme liefert, was die Benutzung dieser Schlüssellänge zum haschen eines Paßworts vorzüglich einfach macht, und somit auch von einigen (Hardware-)Systemen genutzt wird.
175169
176170### Externe Verweise
177171
178172- [HMAC/PBKDF1/PBKDF2](http://keit.co/p/dcpcrypt-hmac-rfc2104/) Implementationen basierend auf DCPcrypt.
179173
180174### Siehe auch...
181175
182176- [Bruce Schneier: Angewandte Kryptographie <ISBN:3-8273-7228-3> (Wikipedia-Eintrag)](https://de.wikipedia.org/wiki/Angewandte_Kryptographie)
183177
184178---
185179*From the Free Pascal wiki, page "DCPcrypt/de", as it stood on 2022-01-13 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history