Sign in Join
Wiki copytemporary

DCPcrypt/de: what changed

Revision 2 to 3. 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
1616- ![](/wiki-images/b/be/Dcp1.png)
1717
1818- ![](/wiki-images/7/74/Dcp2.png)
1919
2020### Autor
2121
2222- David Barton [home page](http://www.cityinthesky.co.uk)
2323
2424#### Beitragende
2525
2626- Portierung nach FPC/Lazarus von [barko](http://wiki.freepascal.org/User:Barko) - 2006
2727- [Graeme Geldenhuys](http://geldenhuys.co.uk) - 2009 (aktueller Bearbeiter)
2828
2929### Lizenz (eng.)
3030
3131The MIT License
3232
3333Permission 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:
3434
3535The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
3636
3737THE 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.
3838
3939### Download
4040
4141Die letzte 'stable release' kann auf [Lazarus-CCR Files](http://sourceforge.net/projects/lazarus-ccr/files/DCPcrypt/) heruntergeladen werden.
4242
4343### Abhängigkeiten / Systemerfordernisse
4444
4545Seit 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.
4646
4747### Quelltext
4848
4949Seit März 2010, wird der DCPCrypt-Quellcode als Teil des [Lazarus-CCR Projekt](http://sourceforge.net/projects/lazarus-ccr/) auf SourceForge.net gehostet.
5050
5151DCPCrypt 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.
5252
53-` git clone `[`git://lazarus-ccr.git.sourceforge.net/gitroot/lazarus-ccr/dcpcrypt`](git://lazarus-ccr.git.sourceforge.net/gitroot/lazarus-ccr/dcpcrypt)
53+```text
54+ git clone git://lazarus-ccr.git.sourceforge.net/gitroot/lazarus-ccr/dcpcrypt
55+```
5456
55-` git clone http://git.code.sf.net/p/lazarus-ccr/dcpcrypt lazarus-ccr-dcpcrypt`
57+```text
58+ git clone http://git.code.sf.net/p/lazarus-ccr/dcpcrypt lazarus-ccr-dcpcrypt
59+```
5660
5761Dannach führt man weitere Updates durch mit:
5862
59-` git pull`
63+```text
64+ git pull
65+```
6066
6167### Installation
6268
6369Seit dem v2.0.4-Release ist DCPCrypt in zwei Pakete aufgeteilt:
6470
6571dcpcrypt.lpk
6672Dies 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).
6773
6874dcpcrypt_laz.lpk
6975Dies ist das Design-Packet das die diversen Komponenten in der Lazarus IDE registriert und in der entsprechenden Palette zur Verfügung stellt.
7076
7177Um DCPCrypt mit der Lazarus IDE zum ersten zu Mal benutzen:
7278
7379- In **Package \> Package-Datei (.lpk) öffnen**, dcpcrypt.lpk öffnen und **Kompilieren** drücken.
7480- 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).
7581- 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.
7682
7783### Nutzung
7884
7985Es 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.\
8086Eine 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.
8187
8288- Chiffren - Der Grundbaustein von DCPcrypt ist die TDCP_cipher-Komponente.
8389- Blockchiffren - Die Basis aller blockchiffren ist die TDCP_blockcipher-Komponente.
8490- Hashs - Die Grundlage aller hash(Prüfsummen)-Algorithmen ist die TDCP_hash-Komponente.
8591
8692Siehe auch die beigefügte Dokumentation.
8793
8894#### Verschlüsselung mit Klar(-text)schlüsseln
8995
9096Normalerweise wird in DCPcrypt beim verschlüsseln davon ausgegangen, daß der Schlüssel "gehasht" wird wenn er mit *.InitStr* übergeben wird.\
9197Man 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:
9298
9399``` pascal
94100var s:string;
95101begin
96102 s:='1234567890ABCDEF1234567890ABCDEF';
97103 DCP_3des1.Init(s[1],length(s)*8,nil);
98104```
99105
100106Quelle: [Forumsbeitrag](http://lazarus.freepascal.org/index.php/topic,18108.msg101683.html#msg101683).
101107
102108### Bekannte Fehler
103109
104110Bei 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:
105111
106112``` pascal
107113program ctst;
108114{$mode objfpc}{$H+}
109115uses
110116 {$IFDEF UNIX}{$IFDEF UseCThreads}
111117 cthreads,
112118 {$ENDIF}{$ENDIF}
113119 Sysutils, DCPrijndael;
114120const
115121 InData: array[0..15] of byte =
116122 ($32,$43,$f6,$a8,$88,$5a,$30,$8d,$31,$31,$98,$a2,$e0,$37,$07,$34);
117123 Key1: array[0..19] of byte =
118124 ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,$ab,$f7,$15,$88,$09,$cf,$4f,$3c,$76,$2e,$71,$60);
119125 Key2: array[0..31] of byte =
120126 ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,$ab,$f7,$15,$88,$09,$cf,$4f,$3c,$76,$2e,$71,$60,
121127 $f3,$8b,$4d,$a5,$6a,$78,$4d,$90,$45,$19,$0c,$fe);
122128 OutData1: array[0..15] of byte =
123129 ($23,$1d,$84,$46,$39,$b3,$1b,$41,$22,$11,$cf,$e9,$37,$12,$b8,$80);
124130 OutData2: array[0..15] of byte =
125131 ($1a,$6e,$6c,$2c,$66,$2e,$7d,$a6,$50,$1f,$fb,$62,$bc,$9e,$93,$f3);
126132var
127133 Cipher: TDCP_rijndael;
128134 Block: array[0..15] of byte;
129135begin
130136// lengths: block = 16 bytes, key = 20 bytes
131137// key = 2b7e151628aed2a6abf7158809cf4f3c762e7160
132138// input = 3243f6a8885a308d313198a2e0370734
133139// encrypt = 231d844639b31b412211cfe93712b880
134140// decrypt = 3243f6a8885a308d313198a2e0370734
135141 Cipher := TDCP_rijndael.Create(nil);
136142 Cipher.Init(Key1, Sizeof(Key1) * 8, nil);
137143 Cipher.EncryptECB(InData, Block);
138144 writeln('128-bit block & 160-bit key results:');
139145 writeln(boolean(CompareMem(@Block, @OutData1, 16)));
140146 Cipher.DecryptECB(Block, Block);
141147 writeln(boolean(CompareMem(@Block, @InData, 16)));
142148 Cipher.Free;
143149// lengths: block = 16 bytes, key = 32 bytes
144150// key = 2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe
145151// input = 3243f6a8885a308d313198a2e0370734
146152// encrypt = 1a6e6c2c662e7da6501ffb62bc9e93f3
147153// decrypt = 3243f6a8885a308d313198a2e0370734
148154 Cipher := TDCP_rijndael.Create(nil);
149155 Cipher.Init(Key2, Sizeof(Key2) * 8, nil);
150156 Cipher.EncryptECB(InData, Block);
151157 writeln('128-bit block & 256-bit key results:');
152158 writeln(boolean(CompareMem(@Block, @OutData2, 16)));
153159 Cipher.DecryptECB(Block, Block);
154160 writeln(boolean(CompareMem(@Block, @InData, 16)));
155161 Cipher.Free;
156162end.
157163```
158164
159165Die Ausgaben die Freepascal 2.2.0 erzeugt sind:
160166
161-` 128-bit block & 160-bit key results:`\
162-` FALSE`\
163-` TRUE`\
164-` 128-bit block & 256-bit key results:`\
165-` TRUE`\
166-` TRUE`
167+```text
168+ 128-bit block & 160-bit key results:
169+ FALSE
170+ TRUE
171+ 128-bit block & 256-bit key results:
172+ TRUE
173+ TRUE
174+```
167175
168176Das 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.
169177
170178### Externe Verweise
171179
172180- [HMAC/PBKDF1/PBKDF2](http://keit.co/p/dcpcrypt-hmac-rfc2104/) Implementationen basierend auf DCPcrypt.
173181
174182### Siehe auch...
175183
176184- [Bruce Schneier: Angewandte Kryptographie <ISBN:3-8273-7228-3> (Wikipedia-Eintrag)](https://de.wikipedia.org/wiki/Angewandte_Kryptographie)
177185
178186---
179187*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