<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chriss</id>
	<title>GlossarWiki - Benutzerbeiträge [de-formal]</title>
	<link rel="self" type="application/atom+xml" href="https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chriss"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/Spezial:Beitr%C3%A4ge/Chriss"/>
	<updated>2026-07-16T15:54:08Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=4621</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=4621"/>
		<updated>2006-07-06T21:49:52Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
{| cellspacing=&amp;quot;3&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Systemparameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=10&amp;lt;/math&amp;gt; || Größe, definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=50&amp;lt;/math&amp;gt; || Max. Fehleranzahl , definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2^m&amp;lt;/math&amp;gt; || Chiffretext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=n-mt&amp;lt;/math&amp;gt; || Plaintext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Schlüssel-Erzeugung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix (erzeugt &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;) &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix (zufällig, nicht singulär)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix (zufällig)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=SGP&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{pub}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(\hat{G},t)&amp;lt;/math&amp;gt; || Public Key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{prv}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(G,S,P)&amp;lt;/math&amp;gt; || Private Key&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Verschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^k&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^n&amp;lt;/math&amp;gt; || Fehlervektor (zufällig, maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;e_K(m,z)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=c=m\hat{G}+z&amp;lt;/math&amp;gt; || Verschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Entschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=cP^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=decode(\hat{c})&amp;lt;/math&amp;gt; || Goppa-Code dekodieren&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=\hat{m}S^{-1}&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d_K(c)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=m=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; || Gesamte Entschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorteile, Nachteile und Probleme==&lt;br /&gt;
Der McEliece Algorithmus war einer der ersten Public-Key-Verfahren und bis heute gab es keine erfolgreichen Angriffe dagegen. Zudem ist die Geschwindigkeit etwa um zwei bis drei Größenordnungen höher als bei RSA [Sch96].&lt;br /&gt;
&lt;br /&gt;
Daß dieses System nie wirklich im praktischen Einsatz verwendet wurde, liegt an den schwerwiegenden Nachteilen. Gehen wir von dem von McEliece definierten Kryptosystem mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; aus:&lt;br /&gt;
&lt;br /&gt;
Zum einen ist der öffentliche Schlüssel extrem lang. &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; ist eine Matrix der Größe &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt;. Damit ist der Public Key &amp;lt;math&amp;gt;k \cdot n&amp;lt;/math&amp;gt;=536576 Bit lang, dies sind immerhin 65.5 kB.&lt;br /&gt;
&lt;br /&gt;
Zum anderen ist die Chiffre fast doppelt so groß wie der Klartext. Pro 524 Bit Klartext entstehen 1024 Bit Chiffre. Das ist eine Gesamtlänge von 195%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel:&lt;br /&gt;
* [[McEliece-Kryptosystem Beispieldurchlauf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
===McEliece Kryptosystem===&lt;br /&gt;
* [St95]	Douglas Stinson, Cryptography. Theory and Practice, CRC Press, 1995, ISBN: 0-84938-521-0, Seite 193 ff.&lt;br /&gt;
* [Sch96]	Bruce Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, 2nd ed., John Wiley &amp;amp; Sons Inc., 1996, ISBN: 0-471-12845-7, Seite 479 ff.&lt;br /&gt;
* [WiME05]	Wikipedia, McEliece Cryptosystem, Wikipedia, The Free Encyclopedia, 23. Dec. 2005 10:39 UTC, http://en.wikipedia.org/w/index.php?title=McEliece_cryptosystem&amp;amp;oldid=32471204&lt;br /&gt;
* [En06]	ENTROPY, McEliece, Error-correcting Codes als Public Key Verfahren, 01.04.2006, http://entropy.stop1984.com/de/mceliece.html&lt;br /&gt;
* [MOV96]	Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press Inc., 1996, ISBN: 0849385237&lt;br /&gt;
&lt;br /&gt;
===Goppa-Code===&lt;br /&gt;
* [Pr98]	Oliver Pretzel, Codes and Algebraic Curves, Clarendon Press, Oxford, 1998, ISBN: 0-19-850039-4, Seite 3 ff., 7 ff., 48 ff., 60 ff., 71 ff., 174 ff.&lt;br /&gt;
* [WiG05]	Wikipedia, Goppa Code, Wikipedia, The Free Encyclopedia, 9 Nov. 2005 09:49 UTC, http://en.wikipedia.org/w/index.php?title=Goppa_code&amp;amp;oldid=27806400&lt;br /&gt;
* [HP03]	W. Cary Huffman, Vera Pless, Fundamentals of Error-Correcting Codes, Cambridge University Press, 2003, ISBN: 0-521-78280-5, Seite 521 ff.&lt;br /&gt;
&lt;br /&gt;
===Elliptische Kurven===&lt;br /&gt;
* [St02]	Douglas Stinson, Cryptography. Theory and Practice, 2nd ed., CRC Press, 2002, ISBN: 1-58488-206-9, Seite 247 ff.&lt;br /&gt;
* [Wä04]	Dietmar Wätjen, Kryptographie. Grundlagen, Algorithmen, Protokolle, Spektrum Akademischer Verlag, 2004, ISBN: 3-8274-1431-8, Seite 241 ff.&lt;br /&gt;
&lt;br /&gt;
===Sonstige===&lt;br /&gt;
* [WiH06]	Wikipedia, Hamming-Abstand, Wikipedia, The Free Encyclopedia, 20. April 2006, 12:47 UTC, http://de.wikipedia.org/w/index.php?title=Hamming-Abstand&amp;amp;oldid=15841561&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=4625</id>
		<title>McEliece-Kryptosystem Beispieldurchlauf</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=4625"/>
		<updated>2006-07-06T21:46:52Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel zeigt einen Beispieldurchlauf für das[[McEliece-Kryptosystem]].&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel. Nachfolgend soll ein Bespiel für ein sehr kleines &amp;lt;math&amp;gt;(n,k,d)=(7,4,3)&amp;lt;/math&amp;gt; [[McEliece-Kryptosystem]] durchgerechnet werden. Dieses Beispiel baut auf dem in [St95] auf.&lt;br /&gt;
&lt;br /&gt;
==Systemparameter==&lt;br /&gt;
Die Systemparameter wurden mit &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k=4&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; festgelegt. Damit werden 4 Klartext-Bit auf 7 Chiffre-Bit abgebildet. Weiter braucht der verwendete Code einen Hamming-Abstand von 3. Damit lassen sich &amp;lt;math&amp;gt;t=(d-1)/2=1&amp;lt;/math&amp;gt; Bitfehler korrigieren.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Um das nachfolgende Beispiel einfacher zu halten, erzeugt die Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; keinen Goppa-Code sondern einen Hamming-Code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;G=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, daß &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; gilt, denn jede Zeile unterscheidet sich in mindesten 3 Werten voneinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bob erzeugt weiter die zufälligen Matrizen &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Teil &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; des öffentlichen Schlüssels berechnet sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=\hat{G}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schlüssel   lautet nun:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}=(\hat{G},t)=\left(\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix},1\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Alice möchte ihre Nachricht &amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; nun verschlüsseln. Dazu muß noch ein beliebiger Fehlervektor &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; mit dem maximalen Gewicht &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; und der Länge &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt; gewählt werden. In diesem Durchlauf soll &amp;lt;math&amp;gt;z=\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; sein. Die Chiffre &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; berechnet sich nun mit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=c&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Nach dem Empfang der Chiffre muß Bob zuerst die Permutation rückgängig machen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird der Hamming-Code dekodiert. Dazu wird für jede Zeile der Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; der Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; berechnet. Von der ersten zur vierten Zeile beträgt der Abstand &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 3 &amp;amp; 3 &amp;amp; 2 \end{pmatrix}&amp;lt;/math&amp;gt;. Damit ist der dekodierte Code &amp;lt;math&amp;gt;\hat{m}=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt;. Zuletzt wird der Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit wurde Alice’s Klartext &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; erfolgreich wiederhergestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* [[McEliece-Kryptosystem]]&lt;br /&gt;
* [St95]	Douglas Stinson, Cryptography. Theory and Practice, CRC Press, 1995, ISBN: 0-84938-521-0, Seite 193 ff.&lt;br /&gt;
* [Sch96]	Bruce Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, 2nd ed., John Wiley &amp;amp; Sons Inc., 1996, ISBN: 0-471-12845-7, Seite 479 ff.&lt;br /&gt;
* [WiME05]	Wikipedia, McEliece Cryptosystem, Wikipedia, The Free Encyclopedia, 23. Dec. 2005 10:39 UTC, http://en.wikipedia.org/w/index.php?title=McEliece_cryptosystem&amp;amp;oldid=32471204&lt;br /&gt;
* [En06]	ENTROPY, McEliece, Error-correcting Codes als Public Key Verfahren, 01.04.2006, http://entropy.stop1984.com/de/mceliece.html&lt;br /&gt;
* [MOV96]	Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press Inc., 1996, ISBN: 0849385237&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2638</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2638"/>
		<updated>2006-07-06T12:02:23Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem [http://svnbook.red-bean.com/ offiziellen Handbuch]:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten [[Diff|Diffs]] erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher [[Datenbank]]-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über [[Netzwerk|Netzwerke]] gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-[[Server]]. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als [[Deamon]] gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Client-Zugriff==&lt;br /&gt;
Am einfachsten und schnellsten ist der Einsatz der [[Kommandozeile]]. Mit dem vorherigen Paket wurden auch gleich alle benötigten Teile des Clients mitinstalliert. Alle Aufrufe finden über das Programm svn statt. Eine komplette Beschreibung der möglichen Kommandos befindet sich im [http://svnbook.red-bean.com/ offiziellen Handbuch].&lt;br /&gt;
&lt;br /&gt;
Der [[Workspace]] ist die aktuell von einem Benutzer bearbeitete Version der Referenzkopie. Es können zu jedem Zeitpunkt beliebig viele, voneinander unabhängige Workspaces von verschiedenen Benutzern gleichzeitig bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein [[Checkout]] ist das initiale Erstellen eines lokalen Workspaces als eine Kopie des aktuellen Stands des Repositories oder einer beliebigen, älteren Version davon: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn co svn://&amp;lt;server&amp;gt;/&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung von Subversion ist der jeweils gerade ausgecheckte [[Revision|Revisionsstand]].&lt;br /&gt;
&lt;br /&gt;
Um beliebige Dateien oder komplette Verzeichnisse aus dem lokalen Workspace zu dem Repository hinzuzufügen, benötigt man folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn add &amp;lt;Datei-/Pfadname&amp;gt; …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen zwei Versionen einer Datei ist nun ein [[Diff]]. Es enthält die nötigen Änderungsanweisungen, eine Datei von einem älteren Stand &#039;&#039;i&#039;&#039; auf den neueren Stand &#039;&#039;i&#039;&#039;+1 zu bringen. Wenn eine Datei im Repository aktualisiert wird, speichert Subversion nicht jedes Mal den kompletten Inhalt der Datei ab, sondern nur die Veränderungen zur jeweils älteren Version. Somit wird nicht nur Speicherplatz gespart, sondern auch die Darstellung der Änderungen erleichtert. Um stets eine gute Performance liefern zu können, liegt nicht die erste, ursprüngliche Version, sondern die jeweils aktuellste der Datei als komplette Datei vor. Gespeichert selbst werden nur die Änderungen zur Vorgängerversion. Ein [[Patch]] ist die Einarbeitung dieser Unterschiede in eine Datei mit altem Stand. Nach dem Patch ist diese auf dem neuen Stand.&lt;br /&gt;
&lt;br /&gt;
Ein [[Commit]] (Check-In) ist ein [[Diff]] des lokalen Workspaces gegen das Repository, das anschließend in das Repository gepatched wird; also das Einarbeiten der durchgeführten Änderungen im Workspace in das Repository.&lt;br /&gt;
&lt;br /&gt;
Ein Commit wird immer dann durchgeführt, wenn eine Änderung in der lokalen Kopie vorgenommen wurde und veröffentlicht werden soll. Um die eben neu hinzugefügten Dateien aus dem lokalen Workspace in das Repository zu übertragen, müssen diese eingecheckt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn ci -m &amp;quot;&amp;lt;Log-Message&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt man hierbei eine Log-Message ein, damit für jeden ersichtlich wird, was bei dieser Änderung geschehen ist. Als Rückmeldung gibt Subversion zu jeder neuen bzw. veränderten Datei die durchgeführten Aktionen und zum Schluß die neue Revision des Repositories.&lt;br /&gt;
&lt;br /&gt;
Ein [[Update]] aktualisiert den lokalen Workspace anhand der neuesten Version im Repository. Damit erhält der Benutzer den derzeit aktuellsten Stand mit allen Änderungen, die zu diesem Zeitpunk bestätigt wurden. Sollten gleichzeitig an derselben Datei von verschiedenen Benutzern, also in verschiedenen Workspaces, Änderungen durchgeführt worden sein, so kann der erste seine Änderung noch ungehindert einchecken. Der Zweite muß seinen lokalen Workspace allerdings zuerst aktualisieren (Update), bevor er seine Änderungen senden kann, da er diese Änderungen der Datei auf einen mittlerweile veralteten Stand aufgebaut hat. Dabei werden die beiden Dateien automatisch gemerged. Ein [[Merge]] führt somit verschiedene Änderungen aus zwei Dateien zu einer zusammen. Dies geht jedoch nur gut, solange die Änderungen an verschiedenen Stellen der Datei vorgenommen wurden. Betreffen die Veränderungen allerdings die gleichen Zeilen oder mittlerweile sogar gelöschte Zeilen, so tritt ein [[Merge-Konflikt]] auf, der nicht automatisch gelöst werden kann. Somit muß der zweite Benutzer beide Veränderungen analysieren und gegebenenfalls anpassen, bevor er diese endgültig eincheckt.&lt;br /&gt;
&lt;br /&gt;
Bevor man selbst Änderungen am lokalen Workspace durchführt, sollte man also seine Kopie mit einem Update auf den aktuellsten Stand bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion gibt nun Informationen zu den eben veränderten Dateien zurück. Die Möglichkeiten sind: Neu hinzugefügt, gelöscht, aktualisiert, vermischt (merge) und Konflikt. Dabei sind die letzten beiden Möglichkeiten besonders zu beachten: Bei einem Merge sollte sich der Entwickler das Ergebnis ansehen und bei einem Konflikt muß er diesen manuell beseitigen und anschließend die korrigierte Version wieder einzuchecken.&lt;br /&gt;
&lt;br /&gt;
Der Update-Befehl muß aber nicht zwangsläufig immer die aktuellste Version auschecken, sondern kann mit dem Parameter &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; auch eine beliebige, alte Revision laden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2543</id>
		<title>McEliece-Kryptosystem Beispieldurchlauf</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2543"/>
		<updated>2006-07-06T01:00:58Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel zeigt einen Beispieldurchlauf für das[[McEliece-Kryptosystem]].&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel. Nachfolgend soll ein Bespiel für ein sehr kleines &amp;lt;math&amp;gt;(n,k,d)=(7,4,3)&amp;lt;/math&amp;gt; [[McEliece-Kryptosystem]] durchgerechnet werden. Dieses Beispiel baut auf dem in [St95] auf.&lt;br /&gt;
&lt;br /&gt;
==Systemparameter==&lt;br /&gt;
Die Systemparameter wurden mit &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k=4&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; festgelegt. Damit werden 4 Klartext-Bit auf 7 Chiffre-Bit abgebildet. Weiter braucht der verwendete Code einen Hamming-Abstand von 3. Damit lassen sich &amp;lt;math&amp;gt;t=(d-1)/2=1&amp;lt;/math&amp;gt; Bitfehler korrigieren.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Um das nachfolgende Beispiel einfacher zu halten, erzeugt die Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; keinen Goppa-Code sondern einen Hamming-Code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;G=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, daß &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; gilt, denn jede Zeile unterscheidet sich in mindesten 3 Werten voneinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bob erzeugt weiter die zufälligen Matrizen &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Teil &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; des öffentlichen Schlüssels berechnet sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=\hat{G}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schlüssel   lautet nun:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}=(\hat{G},t)=\left(\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix},1\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Alice möchte ihre Nachricht &amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; nun verschlüsseln. Dazu muß noch ein beliebiger Fehlervektor &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; mit dem maximalen Gewicht &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; und der Länge &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt; gewählt werden. In diesem Durchlauf soll &amp;lt;math&amp;gt;z=\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; sein. Die Chiffre &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; berechnet sich nun mit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=c&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Nach dem Empfang der Chiffre muß Bob zuerst die Permutation rückgängig machen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird der Hamming-Code dekodiert. Dazu wird für jede Zeile der Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; der Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; berechnet. Von der ersten zur vierten Zeile beträgt der Abstand &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 3 &amp;amp; 3 &amp;amp; 2 \end{pmatrix}&amp;lt;/math&amp;gt;. Damit ist der dekodierte Code &amp;lt;math&amp;gt;\hat{m}=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt;. Zuletzt wird der Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit wurde Alice’s Klartext &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; erfolgreich wiederhergestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* [[McEliece-Kryptosystem]]&lt;br /&gt;
* [St95]	Douglas Stinson, Cryptography. Theory and Practice, CRC Press, 1995, ISBN: 0-84938-521-0, Seite 193 ff.&lt;br /&gt;
* [Sch96]	Bruce Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, 2nd ed., John Wiley &amp;amp; Sons Inc., 1996, ISBN: 0-471-12845-7, Seite 479 ff.&lt;br /&gt;
* [WiME05]	Wikipedia, McEliece Cryptosystem, Wikipedia, The Free Encyclopedia, 23. Dec. 2005 10:39 UTC, http://en.wikipedia.org/w/index.php?title=McEliece_cryptosystem&amp;amp;oldid=32471204&lt;br /&gt;
* [En06]	ENTROPY, McEliece, Error-correcting Codes als Public Key Verfahren, 01.04.2006, http://entropy.stop1984.com/de/mceliece.html&lt;br /&gt;
* [MOV96]	Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press Inc., 1996, ISBN: 0849385237&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2458</id>
		<title>McEliece-Kryptosystem Beispieldurchlauf</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2458"/>
		<updated>2006-07-06T01:00:10Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel zeigt einen Beispieldurchlauf für das[[McEliece-Kryptosystem]].&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel. Nachfolgend soll ein Bespiel für ein sehr kleines &amp;lt;math&amp;gt;(n,k,d)=(7,4,3)&amp;lt;/math&amp;gt; Kryptosystem durchgerechnet werden. Dieses Beispiel baut auf dem in [St95] auf.&lt;br /&gt;
&lt;br /&gt;
==Systemparameter==&lt;br /&gt;
Die Systemparameter wurden mit &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k=4&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; festgelegt. Damit werden 4 Klartext-Bit auf 7 Chiffre-Bit abgebildet. Weiter braucht der verwendete Code einen Hamming-Abstand von 3. Damit lassen sich &amp;lt;math&amp;gt;t=(d-1)/2=1&amp;lt;/math&amp;gt; Bitfehler korrigieren.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Um das nachfolgende Beispiel einfacher zu halten, erzeugt die Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; keinen Goppa-Code sondern einen Hamming-Code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;G=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, daß &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; gilt, denn jede Zeile unterscheidet sich in mindesten 3 Werten voneinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bob erzeugt weiter die zufälligen Matrizen &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Teil &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; des öffentlichen Schlüssels berechnet sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=\hat{G}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schlüssel   lautet nun:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}=(\hat{G},t)=\left(\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix},1\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Alice möchte ihre Nachricht &amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; nun verschlüsseln. Dazu muß noch ein beliebiger Fehlervektor &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; mit dem maximalen Gewicht &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; und der Länge &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt; gewählt werden. In diesem Durchlauf soll &amp;lt;math&amp;gt;z=\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; sein. Die Chiffre &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; berechnet sich nun mit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=c&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Nach dem Empfang der Chiffre muß Bob zuerst die Permutation rückgängig machen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird der Hamming-Code dekodiert. Dazu wird für jede Zeile der Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; der Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; berechnet. Von der ersten zur vierten Zeile beträgt der Abstand &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 3 &amp;amp; 3 &amp;amp; 2 \end{pmatrix}&amp;lt;/math&amp;gt;. Damit ist der dekodierte Code &amp;lt;math&amp;gt;\hat{m}=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt;. Zuletzt wird der Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit wurde Alice’s Klartext &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; erfolgreich wiederhergestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* [[McEliece-Kryptosystem]]&lt;br /&gt;
* [St95]	Douglas Stinson, Cryptography. Theory and Practice, CRC Press, 1995, ISBN: 0-84938-521-0, Seite 193 ff.&lt;br /&gt;
* [Sch96]	Bruce Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, 2nd ed., John Wiley &amp;amp; Sons Inc., 1996, ISBN: 0-471-12845-7, Seite 479 ff.&lt;br /&gt;
* [WiME05]	Wikipedia, McEliece Cryptosystem, Wikipedia, The Free Encyclopedia, 23. Dec. 2005 10:39 UTC, http://en.wikipedia.org/w/index.php?title=McEliece_cryptosystem&amp;amp;oldid=32471204&lt;br /&gt;
* [En06]	ENTROPY, McEliece, Error-correcting Codes als Public Key Verfahren, 01.04.2006, http://entropy.stop1984.com/de/mceliece.html&lt;br /&gt;
* [MOV96]	Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press Inc., 1996, ISBN: 0849385237&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2457</id>
		<title>McEliece-Kryptosystem Beispieldurchlauf</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2457"/>
		<updated>2006-07-06T00:59:32Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel zeigt einen Beispieldurchlauf für das[[McEliece-Kryptosystem]].&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel. Nachfolgend soll ein Bespiel für ein sehr kleines &amp;lt;math&amp;gt;(n,k,d)=(7,4,3)&amp;lt;/math&amp;gt; Kryptosystem durchgerechnet werden. Dieses Beispiel baut auf dem in [St95] auf.&lt;br /&gt;
&lt;br /&gt;
==Systemparameter==&lt;br /&gt;
Die Systemparameter wurden mit &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k=4&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; festgelegt. Damit werden 4 Klartext-Bit auf 7 Chiffre-Bit abgebildet. Weiter braucht der verwendete Code einen Hamming-Abstand von 3. Damit lassen sich &amp;lt;math&amp;gt;t=(d-1)/2=1&amp;lt;/math&amp;gt; Bitfehler korrigieren.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Um das nachfolgende Beispiel einfacher zu halten, erzeugt die Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; keinen Goppa-Code sondern einen Hamming-Code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;G=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, daß &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; gilt, denn jede Zeile unterscheidet sich in mindesten 3 Werten voneinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bob erzeugt weiter die zufälligen Matrizen &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Teil &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; des öffentlichen Schlüssels berechnet sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=\hat{G}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schlüssel   lautet nun:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}=(\hat{G},t)=\left(\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix},1\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Alice möchte ihre Nachricht &amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; nun verschlüsseln. Dazu muß noch ein beliebiger Fehlervektor &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; mit dem maximalen Gewicht &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; und der Länge &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt; gewählt werden. In diesem Durchlauf soll &amp;lt;math&amp;gt;z=\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; sein. Die Chiffre &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; berechnet sich nun mit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=c&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Nach dem Empfang der Chiffre muß Bob zuerst die Permutation rückgängig machen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird der Hamming-Code dekodiert. Dazu wird für jede Zeile der Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; der Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; berechnet. Von der ersten zur vierten Zeile beträgt der Abstand &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 3 &amp;amp; 3 &amp;amp; 2 \end{pmatrix}&amp;lt;/math&amp;gt;. Damit ist der dekodierte Code &amp;lt;math&amp;gt;\hat{m}=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt;. Zuletzt wird der Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit wurde Alice’s Klartext &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; erfolgreich wiederhergestellt.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* [[McEliece-Kryptosystem]]&lt;br /&gt;
* [St95]	Douglas Stinson, Cryptography. Theory and Practice, CRC Press, 1995, ISBN: 0-84938-521-0, Seite 193 ff.&lt;br /&gt;
* [Sch96]	Bruce Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, 2nd ed., John Wiley &amp;amp; Sons Inc., 1996, ISBN: 0-471-12845-7, Seite 479 ff.&lt;br /&gt;
* [WiME05]	Wikipedia, McEliece Cryptosystem, Wikipedia, The Free Encyclopedia, 23. Dec. 2005 10:39 UTC, http://en.wikipedia.org/w/index.php?title=McEliece_cryptosystem&amp;amp;oldid=32471204&lt;br /&gt;
* [En06]	ENTROPY, McEliece, Error-correcting Codes als Public Key Verfahren, 01.04.2006, http://entropy.stop1984.com/de/mceliece.html&lt;br /&gt;
* [MOV96]	Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press Inc., 1996, ISBN: 0849385237&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2456</id>
		<title>McEliece-Kryptosystem Beispieldurchlauf</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2456"/>
		<updated>2006-07-06T00:58:54Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel zeigt einen Beispieldurchlauf für das[[McEliece-Kryptosystem]].&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel. Nachfolgend soll ein Bespiel für ein sehr kleines &amp;lt;math&amp;gt;(n,k,d)=(7,4,3)&amp;lt;/math&amp;gt; Kryptosystem durchgerechnet werden. Dieses Beispiel baut auf dem in [St95] auf.&lt;br /&gt;
&lt;br /&gt;
==Systemparameter==&lt;br /&gt;
Die Systemparameter wurden mit &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k=4&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; festgelegt. Damit werden 4 Klartext-Bit auf 7 Chiffre-Bit abgebildet. Weiter braucht der verwendete Code einen Hamming-Abstand von 3. Damit lassen sich &amp;lt;math&amp;gt;t=(d-1)/2=1&amp;lt;/math&amp;gt; Bitfehler korrigieren.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Um das nachfolgende Beispiel einfacher zu halten, erzeugt die Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; keinen Goppa-Code sondern einen Hamming-Code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;G=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, daß &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; gilt, denn jede Zeile unterscheidet sich in mindesten 3 Werten voneinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bob erzeugt weiter die zufälligen Matrizen &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Teil &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; des öffentlichen Schlüssels berechnet sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=\hat{G}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schlüssel   lautet nun:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}=(\hat{G},t)=\left(\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix},1\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Alice möchte ihre Nachricht &amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; nun verschlüsseln. Dazu muß noch ein beliebiger Fehlervektor &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; mit dem maximalen Gewicht &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; und der Länge &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt; gewählt werden. In diesem Durchlauf soll &amp;lt;math&amp;gt;z=\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; sein. Die Chiffre &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; berechnet sich nun mit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} + \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=c&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Nach dem Empfang der Chiffre muß Bob zuerst die Permutation rückgängig machen:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird der Hamming-Code dekodiert. Dazu wird für jede Zeile der Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; der Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; berechnet. Von der ersten zur vierten Zeile beträgt der Abstand &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 3 &amp;amp; 3 &amp;amp; 2 \end{pmatrix}&amp;lt;/math&amp;gt;. Damit ist der dekodierte Code &amp;lt;math&amp;gt;\hat{m}=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt;. Zuletzt wird der Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}=&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}=&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit wurde Alice’s Klartext &amp;lt;math&amp;gt;\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; erfolgreich wiederhergestellt.&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2455</id>
		<title>McEliece-Kryptosystem Beispieldurchlauf</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem_Beispieldurchlauf&amp;diff=2455"/>
		<updated>2006-07-06T00:41:40Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel zeigt einen Beispieldurchlauf für das[[McEliece-Kryptosystem]].&lt;br /&gt;
&lt;br /&gt;
==Beispieldurchlauf==&lt;br /&gt;
Um einen Algorithmus besser verstehen zu können, hilft meist ein praktisches Beispiel. Nachfolgend soll ein Bespiel für ein sehr kleines &amp;lt;math&amp;gt;(n,k,d)=(7,4,3)&amp;lt;/math&amp;gt; Kryptosystem durchgerechnet werden. Dieses Beispiel baut auf dem in [St95] auf.&lt;br /&gt;
&lt;br /&gt;
==Systemparameter==&lt;br /&gt;
Die Systemparameter wurden mit &amp;lt;math&amp;gt;n=7&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k=4&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; festgelegt. Damit werden 4 Klartext-Bit auf 7 Chiffre-Bit abgebildet. Weiter braucht der verwendete Code einen Hamming-Abstand von 3. Damit lassen sich &amp;lt;math&amp;gt;t=(d-1)/2=1&amp;lt;/math&amp;gt; Bitfehler korrigieren.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Um das nachfolgende Beispiel einfacher zu halten, erzeugt die Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; keinen Goppa-Code sondern einen Hamming-Code:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;G=\begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, daß &amp;lt;math&amp;gt;d=3&amp;lt;/math&amp;gt; gilt, denn jede Zeile unterscheidet sich in mindesten 3 Werten voneinander.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bob erzeugt weiter die zufälligen Matrizen &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;S=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;P=\begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Teil &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; des öffentlichen Schlüssels berechnet sich wie folgt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix} \cdot \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 \end{pmatrix} \cdot \begin{pmatrix} 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \end{pmatrix}=&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;=\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix}=\hat{G}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schlüssel   lautet nun:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}=(\hat{G},t)=\left(\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 0 \end{pmatrix},1\right)&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2544</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2544"/>
		<updated>2006-07-06T00:18:28Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
{| cellspacing=&amp;quot;3&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Systemparameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=10&amp;lt;/math&amp;gt; || Größe, definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=50&amp;lt;/math&amp;gt; || Max. Fehleranzahl , definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2^m&amp;lt;/math&amp;gt; || Chiffretext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=n-mt&amp;lt;/math&amp;gt; || Plaintext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Schlüssel-Erzeugung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix (erzeugt &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;) &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix (zufällig, nicht singulär)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix (zufällig)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=SGP&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{pub}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(\hat{G},t)&amp;lt;/math&amp;gt; || Public Key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{prv}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(G,S,P)&amp;lt;/math&amp;gt; || Private Key&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Verschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^k&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^n&amp;lt;/math&amp;gt; || Fehlervektor (zufällig, maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;e_K(m,z)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=c=m\hat{G}+z&amp;lt;/math&amp;gt; || Verschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Entschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=cP^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=decode(\hat{c})&amp;lt;/math&amp;gt; || Goppa-Code dekodieren&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=\hat{m}S^{-1}&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d_K(c)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=m=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; || Gesamte Entschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorteile, Nachteile und Probleme==&lt;br /&gt;
Der McEliece Algorithmus war einer der ersten Public-Key-Verfahren und bis heute gab es keine erfolgreichen Angriffe dagegen. Zudem ist die Geschwindigkeit etwa um zwei bis drei Größenordnungen höher als bei RSA [Sch96].&lt;br /&gt;
&lt;br /&gt;
Daß dieses System nie wirklich im praktischen Einsatz verwendet wurde, liegt an den schwerwiegenden Nachteilen. Gehen wir von dem von McEliece definierten Kryptosystem mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; aus:&lt;br /&gt;
&lt;br /&gt;
Zum einen ist der öffentliche Schlüssel extrem lang. &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; ist eine Matrix der Größe &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt;. Damit ist der Public Key &amp;lt;math&amp;gt;k \cdot n&amp;lt;/math&amp;gt;=536576 Bit lang, dies sind immerhin 65.5 kB.&lt;br /&gt;
&lt;br /&gt;
Zum anderen ist die Chiffre fast doppelt so groß wie der Klartext. Pro 524 Bit Klartext entstehen 1024 Bit Chiffre. Das ist eine Gesamtlänge von 195%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
===McEliece Kryptosystem===&lt;br /&gt;
* [St95]	Douglas Stinson, Cryptography. Theory and Practice, CRC Press, 1995, ISBN: 0-84938-521-0, Seite 193 ff.&lt;br /&gt;
* [Sch96]	Bruce Schneier, Applied Cryptography, Protocols, Algorithms and Source Code in C, 2nd ed., John Wiley &amp;amp; Sons Inc., 1996, ISBN: 0-471-12845-7, Seite 479 ff.&lt;br /&gt;
* [WiME05]	Wikipedia, McEliece Cryptosystem, Wikipedia, The Free Encyclopedia, 23. Dec. 2005 10:39 UTC, http://en.wikipedia.org/w/index.php?title=McEliece_cryptosystem&amp;amp;oldid=32471204&lt;br /&gt;
* [En06]	ENTROPY, McEliece, Error-correcting Codes als Public Key Verfahren, 01.04.2006, http://entropy.stop1984.com/de/mceliece.html&lt;br /&gt;
* [MOV96]	Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press Inc., 1996, ISBN: 0849385237&lt;br /&gt;
&lt;br /&gt;
===Goppa-Code===&lt;br /&gt;
* [Pr98]	Oliver Pretzel, Codes and Algebraic Curves, Clarendon Press, Oxford, 1998, ISBN: 0-19-850039-4, Seite 3 ff., 7 ff., 48 ff., 60 ff., 71 ff., 174 ff.&lt;br /&gt;
* [WiG05]	Wikipedia, Goppa Code, Wikipedia, The Free Encyclopedia, 9 Nov. 2005 09:49 UTC, http://en.wikipedia.org/w/index.php?title=Goppa_code&amp;amp;oldid=27806400&lt;br /&gt;
* [HP03]	W. Cary Huffman, Vera Pless, Fundamentals of Error-Correcting Codes, Cambridge University Press, 2003, ISBN: 0-521-78280-5, Seite 521 ff.&lt;br /&gt;
&lt;br /&gt;
===Elliptische Kurven===&lt;br /&gt;
* [St02]	Douglas Stinson, Cryptography. Theory and Practice, 2nd ed., CRC Press, 2002, ISBN: 1-58488-206-9, Seite 247 ff.&lt;br /&gt;
* [Wä04]	Dietmar Wätjen, Kryptographie. Grundlagen, Algorithmen, Protokolle, Spektrum Akademischer Verlag, 2004, ISBN: 3-8274-1431-8, Seite 241 ff.&lt;br /&gt;
&lt;br /&gt;
===Sonstige===&lt;br /&gt;
* [WiH06]	Wikipedia, Hamming-Abstand, Wikipedia, The Free Encyclopedia, 20. April 2006, 12:47 UTC, http://de.wikipedia.org/w/index.php?title=Hamming-Abstand&amp;amp;oldid=15841561&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2454</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2454"/>
		<updated>2006-07-06T00:11:06Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
{| cellspacing=&amp;quot;3&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Systemparameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=10&amp;lt;/math&amp;gt; || Größe, definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=50&amp;lt;/math&amp;gt; || Max. Fehleranzahl , definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2^m&amp;lt;/math&amp;gt; || Chiffretext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=n-mt&amp;lt;/math&amp;gt; || Plaintext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Schlüssel-Erzeugung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix (erzeugt &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;) &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix (zufällig, nicht singulär)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix (zufällig)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=SGP&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{pub}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(\hat{G},t)&amp;lt;/math&amp;gt; || Public Key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{prv}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(G,S,P)&amp;lt;/math&amp;gt; || Private Key&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Verschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^k&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^n&amp;lt;/math&amp;gt; || Fehlervektor (zufällig, maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;e_K(m,z)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=c=m\hat{G}+z&amp;lt;/math&amp;gt; || Verschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Entschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=cP^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=decode(\hat{c})&amp;lt;/math&amp;gt; || Goppa-Code dekodieren&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=\hat{m}S^{-1}&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d_K(c)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=m=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; || Gesamte Entschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorteile, Nachteile und Probleme==&lt;br /&gt;
Der McEliece Algorithmus war einer der ersten Public-Key-Verfahren und bis heute gab es keine erfolgreichen Angriffe dagegen. Zudem ist die Geschwindigkeit etwa um zwei bis drei Größenordnungen höher als bei RSA [Sch96].&lt;br /&gt;
&lt;br /&gt;
Daß dieses System nie wirklich im praktischen Einsatz verwendet wurde, liegt an den schwerwiegenden Nachteilen. Gehen wir von dem von McEliece definierten Kryptosystem mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; aus:&lt;br /&gt;
&lt;br /&gt;
Zum einen ist der öffentliche Schlüssel extrem lang. &amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; ist eine Matrix der Größe &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt;. Damit ist der Public Key &amp;lt;math&amp;gt;k \cdot n&amp;lt;/math&amp;gt;=536576 Bit lang, dies sind immerhin 65.5 kB.&lt;br /&gt;
&lt;br /&gt;
Zum anderen ist die Chiffre fast doppelt so groß wie der Klartext. Pro 524 Bit Klartext entstehen 1024 Bit Chiffre. Das ist eine Gesamtlänge von 195%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2453</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2453"/>
		<updated>2006-07-06T00:05:20Z</updated>

		<summary type="html">&lt;p&gt;Chriss: /* Kurzzusammenfassung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
{| cellspacing=&amp;quot;3&amp;quot; &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Systemparameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=10&amp;lt;/math&amp;gt; || Größe, definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=50&amp;lt;/math&amp;gt; || Max. Fehleranzahl , definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2^m&amp;lt;/math&amp;gt; || Chiffretext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=n-mt&amp;lt;/math&amp;gt; || Plaintext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Schlüssel-Erzeugung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix (erzeugt &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;) &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix (zufällig, nicht singulär)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix (zufällig)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=SGP&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{pub}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(\hat{G},t)&amp;lt;/math&amp;gt; || Public Key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{prv}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(G,S,P)&amp;lt;/math&amp;gt; || Private Key&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Verschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^k&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^n&amp;lt;/math&amp;gt; || Fehlervektor (zufällig, maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;e_K(m,z)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=c=m\hat{G}+z&amp;lt;/math&amp;gt; || Verschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Entschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=cP^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=decode(\hat{c})&amp;lt;/math&amp;gt; || Goppa-Code dekodieren&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=\hat{m}S^{-1}&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d_K(c)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=m=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; || Gesamte Entschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2452</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2452"/>
		<updated>2006-07-06T00:01:31Z</updated>

		<summary type="html">&lt;p&gt;Chriss: /* Kurzzusammenfassung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
{| &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Systemparameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=10&amp;lt;/math&amp;gt; || Größe, definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=50&amp;lt;/math&amp;gt; || Max. Fehleranzahl , definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2^m&amp;lt;/math&amp;gt; || Chiffretext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=n-mt&amp;lt;/math&amp;gt; || Plaintext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Schlüssel-Erzeugung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix (erzeugt &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;) &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix (zufällig, nicht singulär)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; || &amp;amp;nbsp; || &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix (zufällig)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{G}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=SGP&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{pub}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(\hat{G},t)&amp;lt;/math&amp;gt; || Public Key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;K_{prv}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=(G,S,P)&amp;lt;/math&amp;gt; || Private Key&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Verschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^k&amp;lt;/math&amp;gt; || Klartext&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;\in (Z_2)^n&amp;lt;/math&amp;gt; || Fehlervektor (zufällig, maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;e_K(m,z)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=c=m\hat{G}+z&amp;lt;/math&amp;gt; || Verschlüsselungsfunktion&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Entschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=cP^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=decode(\hat{c})&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=\hat{m}S^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d_K(c)&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=m=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; || Inverse Permutation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2451</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2451"/>
		<updated>2006-07-05T23:46:33Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
{| &lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Systemparameter&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=10&amp;lt;/math&amp;gt; || Größe, definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=50&amp;lt;/math&amp;gt; || Max. Fehleranzahl , definiert, Vorgabe von McEliece&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2^m&amp;lt;/math&amp;gt; || Chiffretext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=n-mt&amp;lt;/math&amp;gt; || Plaintext-Blocklänge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Schlüssel-Erzeugung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;=2t+1&amp;lt;/math&amp;gt; || Hamming-Abstand&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Verschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot; align=&amp;quot;left&amp;quot; | Entschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2446</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2446"/>
		<updated>2006-07-05T23:34:48Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Kurzzusammenfassung==&lt;br /&gt;
====Systemparameter====&lt;br /&gt;
{| &lt;br /&gt;
|Alpha || Beta || Gamma&lt;br /&gt;
|-&lt;br /&gt;
|Delta || Epsilon || Zeta&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Schlüssel-Erzeugung====&lt;br /&gt;
{| &lt;br /&gt;
|Alpha || Beta || Gamma&lt;br /&gt;
|-&lt;br /&gt;
|Delta || Epsilon || Zeta&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Verschlüsselung====&lt;br /&gt;
{| &lt;br /&gt;
|Alpha || Beta || Gamma&lt;br /&gt;
|-&lt;br /&gt;
|Delta || Epsilon || Zeta&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Entschlüsselung====&lt;br /&gt;
{| &lt;br /&gt;
|Alpha || Beta || Gamma&lt;br /&gt;
|-&lt;br /&gt;
|Delta || Epsilon || Zeta&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2445</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2445"/>
		<updated>2006-07-05T23:28:34Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entschlüsselung==&lt;br /&gt;
Zum Entschlüsseln nimmt Bob die empfangene Chiffre und berechnet zuerst ein &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{c}=cP^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die Dekodierungsfunktion &amp;lt;math&amp;gt;decode(c)&amp;lt;/math&amp;gt; des Goppa-Codes auf &amp;lt;math&amp;gt;\hat{c}&amp;lt;/math&amp;gt; angewandt, um  das passende &amp;lt;math&amp;gt;\hat{m}&amp;lt;/math&amp;gt; zu finden. Dafür muß der Hamming-Abstand &amp;lt;math&amp;gt;d_H(\hat{m}G,\hat{c}) \le t&amp;lt;/math&amp;gt; werden. Der Vorteil an Goppa-Codes ist, daß diese Operation, im Gegensatz zu linearen Codes, effizient berechnet werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zuletzt ermittelt Bob den ursprünglichen Klartext &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; mit:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;m=\hat{m}S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die komplette Entschlüsselungsfunktion sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d_K(c)=decode(cP^{-1}) \cdot S^{-1}&amp;lt;/math&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2440</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2440"/>
		<updated>2006-07-05T23:21:16Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verschlüsselung==&lt;br /&gt;
Sind die Schlüssel erzeugt, kann Alice mit Hilfe des öffentlichen Schlüssels eine Nachricht verschlüsseln und an Bob senden.&lt;br /&gt;
&lt;br /&gt;
Dazu teilt sie zuerst ihre Nachricht in binäre Blöcke &amp;lt;math&amp;gt;m \in (\mathbb{Z}_2)^k&amp;lt;/math&amp;gt; der Länge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; auf. Anschließend verschlüsselt sie die Blöcke mit der Verschlüsselungsfunktion:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;e_K(m,z)=c=m\hat{G}+z&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
wobei &amp;lt;math&amp;gt;z \in (\mathbb{Z}_2)^n&amp;lt;/math&amp;gt; ein beliebiger Vektor der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ist, der ein maximales Gewicht von &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; aufweist. Das bedeutet, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; besitzt maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Einsen. Durch diesen Fehlervektor wird der Chiffretext an maximal &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Stellen verändert, also invertiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2438</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2438"/>
		<updated>2006-07-05T23:15:19Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
==Schlüssel-Erzeugung==&lt;br /&gt;
Angenommen Alice möchte Bob eine verschlüsselte Nachricht senden. Um sein Schlüsselpaar (öffentlicher und privater Schlüssel) zu erzeugen, muß Bob folgende Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
* Zuerst wird eine &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Generator-Matrix &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; für den Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; erzeugt. Dies ist eine Matrix, mit der man aus einem binären Klartext der Bitlänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, die Chiffre mit der Länge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; berechnen kann.&lt;br /&gt;
* Anschließend erzeugt er eine zufällige, binäre, nicht singuläre &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt; Scramble-Matrix &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, die über &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt; invertierbar ist. Nicht singulär bedeutet, daß sie regulär ist. Ihre Determinante muß also ungleich Null sein, denn nur solche Matrizen lassen sich invertieren. Eine binäre Matrix besitzt nur Elemente aus &amp;lt;math&amp;gt;\mathbb{Z}_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Danach erzeugt er eine ebenfalls zufällige &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; Permutations-Matrix &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Eine Permutationsmatrix ist eine binäre Matrix, die in jeder Zeile und Spalte nur genau eine 1 enthält.&lt;br /&gt;
* Abschließend wird die &amp;lt;math&amp;gt;k \times n&amp;lt;/math&amp;gt; Matrix &amp;lt;math&amp;gt;\hat G&amp;lt;/math&amp;gt; berechnet:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{G}=SGP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der komplette Schlüssel K ist nun:&lt;br /&gt;
:&amp;lt;math&amp;gt;K:=(G,S,P,\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Bob’s öffentlicher Schüssel Kpub ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{pub}:=(\hat{G},t)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Sein privater Schüssel Kprv ist:&lt;br /&gt;
:&amp;lt;math&amp;gt;K_{prv}:=(G,S,P)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2437</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2437"/>
		<updated>2006-07-05T22:58:05Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;n=2^m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;k=n-mt&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d=2t+1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt; z.B. in [St95]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,k,t)&amp;lt;/math&amp;gt; z.B. in [Sch96]&lt;br /&gt;
*&amp;lt;math&amp;gt;(n,t,k)&amp;lt;/math&amp;gt; z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2430</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2430"/>
		<updated>2006-07-05T22:46:29Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Überblick==&lt;br /&gt;
[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Definitionen==&lt;br /&gt;
Um die oben genannten drei Verfahren anwenden zu können, müssen zuerst einige Definitionen erfolgen:&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
Sei &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; ein binärer &amp;lt;math&amp;gt;(n, k)&amp;lt;/math&amp;gt; Goppa-Code, der &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Fehler effizient korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
===Systemparameter===&lt;br /&gt;
Um den Aufbau eines McEliece-Kryptosystems eindeutig zu beschreiben, sind die beiden Systemparameter &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; notwendig. &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; gibt indirekt die Blockgrößen an und &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; die maximale Anzahl der Fehler, die der verwendete Goppa-Code &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; noch fehlerfrei korrigieren kann.&lt;br /&gt;
&lt;br /&gt;
Ein McEliece-Kryptosystem ist also wie folgt definiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;McEliece:=(m,t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daraus lassen sich drei weitere Parameter berechnen:&lt;br /&gt;
* Die Chiffretext-Blocklänge &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
#todo&lt;br /&gt;
* Die Plaintext-Blocklänge &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#todo&lt;br /&gt;
* Der minimale Hamming-Abstand &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; des Codes &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#todo&lt;br /&gt;
&lt;br /&gt;
In der Literatur werden die Kryptosysteme meist durch eine der drei, inhaltlich äquivalenten, Notationen beschrieben:&lt;br /&gt;
*z.B. in [St95]&lt;br /&gt;
*z.B. in [Sch96]&lt;br /&gt;
*z.B. in [WiME05]&lt;br /&gt;
&lt;br /&gt;
Nachfolgend verwende ich die erste Notation mit &amp;lt;math&amp;gt;(n,k,d)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
McEliece selbst schlug in seinem Original-Papier ein System mit &amp;lt;math&amp;gt;(1024, 524, 101)&amp;lt;/math&amp;gt; vor, also &amp;lt;math&amp;gt;(m = 10, t = 50)&amp;lt;/math&amp;gt; als minimale Konfiguration eines sicheren Algorithmus. In [MOV96] wird ein etwas unsicheres, dafür aber effizienteres System mit &amp;lt;math&amp;gt;(1024, 644, 77)&amp;lt;/math&amp;gt;, also &amp;lt;math&amp;gt;(m = 10, t = 38)&amp;lt;/math&amp;gt; vorgestellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2426</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2426"/>
		<updated>2006-07-05T22:39:34Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Robert McEliece]] entwickelte 1978 eines der ersten asymmetrischen [[Public-Key-Verfahren]]. &lt;br /&gt;
&lt;br /&gt;
Dieses baut auf allgemeinen binären linearen fehlerkorrigierenden Codes auf und versteckt absichtlich Fehler in der [[Chiffre]], um damit die [[Kryptoanalyse]] erheblich zu erschweren.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist es, einen allgemeinen [[fehlerkorrigierenden Code]] zu verwenden. Die Dekodierung solcher Codes ist ein [[NP-Problem]]. Allerdings gibt es bestimmte Code-Untergruppen, die eine Lösung in polynomialer Zeit ermöglichen, unter anderen die auch von diesem Algorithmus verwendeten [[Goppa-Code|Goppa-Codes]]. &lt;br /&gt;
&lt;br /&gt;
Der [[Klartext]] wird also über eine Generator-Matrix in einen Goppa-Code umgewandelt. Dieser wird durch Multiplikation mit zufälligen weiteren [[Matrix|Matrizen]] als allgemeiner linearer Code getarnt.&lt;br /&gt;
&lt;br /&gt;
Ohne das Wissen der einzelnen zur Herstellung des Codes benutzter Matrizen, kann nun die Chiffre nicht mehr in den ursprünglichen Goppa-Code zurückverwandelt werden, also auch nicht mehr dekodiert werden.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel beinhaltet eine Generator-Matrix, mit welcher man den Klartext direkt in den oben beschriebenen, allgemeinen linearen Code umwandeln kann. Zusätzlich enthält der Schlüssel, wie viele Fehler anschließend maximal in die Chiffre eingebaut werden sollen, also wie viele Bits invertiert werden sollen.&lt;br /&gt;
&lt;br /&gt;
Der geheime, private Schlüssel enthält die Information, wie man den allgemeinen linearen Code wieder in einen Goppa-Code zurückverwandeln kann, der anschließend performant dekodiert werden kann und somit die eingebauten Fehler wieder korrigiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus teilt sich in die drei folgenden Hauptbestandteile auf: &#039;&#039;&#039;Die Schlüssel-Erzeugung&#039;&#039;&#039;, &#039;&#039;&#039;das Verschlüsseln&#039;&#039;&#039; und &#039;&#039;&#039;das Entschlüsseln&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zusätzliche Informationen==&lt;br /&gt;
[[Douglas Stinson]] schreibt in [St95] eine sehr gute Erklärung des McEliece-Kryptosystems mit einem Beispiel. Weitere empfehlenswerte Literatur zu diesem Thema ist in [Sch96] und [WiME05]. Eine kurze deutsche Einführung in dieses Thema findet man in [En06].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Kategorie:Kryptographie&amp;diff=4622</id>
		<title>Kategorie:Kryptographie</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Kategorie:Kryptographie&amp;diff=4622"/>
		<updated>2006-07-05T22:34:55Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Mathematik]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2424</id>
		<title>McEliece-Kryptosystem</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=McEliece-Kryptosystem&amp;diff=2424"/>
		<updated>2006-07-05T22:34:41Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Neu&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Version&amp;diff=4618</id>
		<title>Version</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Version&amp;diff=4618"/>
		<updated>2006-07-05T22:07:47Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Revision]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2484</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2484"/>
		<updated>2006-07-05T22:06:00Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem [http://svnbook.red-bean.com/ offiziellen Handbuch]:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten [[Diff|Diffs]] erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher [[Datenbank]]-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über [[Netzwerk|Netzwerke]] gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-[[Server]]. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als [[Deamon]] gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Client-Zugriff==&lt;br /&gt;
Am einfachsten und schnellsten ist der Einsatz der [[Kommandozeile]]. Mit dem vorherigen Paket wurden auch gleich alle benötigten Teile des Clients mitinstalliert. Alle Aufrufe finden über das Programm svn statt. Eine komplette Beschreibung der möglichen Kommandos befindet sich im [http://svnbook.red-bean.com/ offiziellen Handbuch].&lt;br /&gt;
&lt;br /&gt;
Der [[Workspace]] ist die aktuell von einem Benutzer bearbeitete Version der Referenzkopie. Es können zu jedem Zeitpunkt beliebig viele, voneinander unabhängige Workspaces von verschiedenen Benutzern gleichzeitig bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein [[Checkout]] ist das initiale Erstellen eines lokalen Workspaces als eine Kopie des aktuellen Stands des Repositories oder einer beliebigen, älteren Version davon: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn co svn://&amp;lt;server&amp;gt;/&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung von Subversion ist der jeweils gerade ausgecheckte [[Revision|Revisionsstand]].&lt;br /&gt;
&lt;br /&gt;
Um beliebige Dateien oder komplette Verzeichnisse aus dem lokalen Workspace zu dem Repository hinzuzufügen, benötigt man folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn add &amp;lt;Datei-/Pfadname&amp;gt; …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen zwei Versionen einer Datei ist nun ein [[Diff]]. Es enthält die nötigen Änderungsanweisungen, eine Datei von einem älteren Stand &#039;&#039;i&#039;&#039; auf den neueren Stand &#039;&#039;i&#039;&#039;+1 zu bringen. Wenn eine Datei im Repository aktualisiert wird, speichert Subversion nicht jedes Mal den kompletten Inhalt der Datei ab, sondern nur die Veränderungen zur jeweils älteren Version. Somit wird nicht nur Speicherplatz gespart, sondern auch die Darstellung der Änderungen erleichtert. Um stets eine gute Performance liefern zu können, liegt nicht die erste, ursprüngliche Version, sondern die jeweils aktuellste der Datei als komplette Datei vor. Gespeichert selbst werden nur die Änderungen zur Vorgängerversion. Ein [[Patch]] ist die Einarbeitung dieser Unterschiede in eine Datei mit altem Stand. Nach dem Patch ist diese auf dem neuen Stand.&lt;br /&gt;
&lt;br /&gt;
Ein [[Commit]] (Check-In) ist ein [[Diff]] des lokalen Workspaces gegen das Repository, das anschließend in das Repository gepatched wird; also das Einarbeiten der durchgeführten Änderungen im Workspace in das Repository.&lt;br /&gt;
&lt;br /&gt;
Ein Commit wird immer dann durchgeführt, wenn eine Änderung in der lokalen Kopie vorgenommen wurde und veröffentlicht werden soll. Um die eben neu hinzugefügten Dateien aus dem lokalen Workspace in das Repository zu übertragen, müssen diese eingecheckt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn ci -m &amp;quot;&amp;lt;Log-Message&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt man hierbei eine Log-Message ein, damit für jeden ersichtlich wird, was bei dieser Änderung geschehen ist. Als Rückmeldung gibt Subversion zu jeder neuen bzw. veränderten Datei die durchgeführten Aktionen und zum Schluß die neue Revision des Repositories.&lt;br /&gt;
&lt;br /&gt;
Ein [[Update]] aktualisiert den lokalen Workspace anhand der neuesten Version im Repository. Damit erhält der Benutzer den derzeit aktuellsten Stand mit allen Änderungen, die zu diesem Zeitpunk bestätigt wurden. Sollten gleichzeitig an derselben Datei von verschiedenen Benutzern, also in verschiedenen Workspaces, Änderungen durchgeführt worden sein, so kann der erste seine Änderung noch ungehindert einchecken. Der Zweite muß seinen lokalen Workspace allerdings zuerst aktualisieren (Update), bevor er seine Änderungen senden kann, da er diese Änderungen der Datei auf einen mittlerweile veralteten Stand aufgebaut hat. Dabei werden die beiden Dateien automatisch gemerged. Ein [[Merge]] führt somit verschiedene Änderungen aus zwei Dateien zu einer zusammen. Dies geht jedoch nur gut, solange die Änderungen an verschiedenen Stellen der Datei vorgenommen wurden. Betreffen die Veränderungen allerdings die gleichen Zeilen oder mittlerweile sogar gelöschte Zeilen, so tritt ein [[Merge-Konflikt]] auf, der nicht automatisch gelöst werden kann. Somit muß der zweite Benutzer beide Veränderungen analysieren und gegebenenfalls anpassen, bevor er diese endgültig eincheckt.&lt;br /&gt;
&lt;br /&gt;
Bevor man selbst Änderungen am lokalen Workspace durchführt, sollte man also seine Kopie mit einem Update auf den aktuellsten Stand bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion gibt nun Informationen zu den eben veränderten Dateien zurück. Die Möglichkeiten sind: Neu hinzugefügt, gelöscht, aktualisiert, vermischt (merge) und Konflikt. Dabei sind die letzten beiden Möglichkeiten besonders zu beachten: Bei einem Merge sollte sich der Entwickler das Ergebnis ansehen und bei einem Konflikt muß er diesen manuell beseitigen und anschließend die korrigierte Version wieder einzuchecken.&lt;br /&gt;
&lt;br /&gt;
Der Update-Befehl muß aber nicht zwangsläufig immer die aktuellste Version auschecken, sondern kann mit dem Parameter &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; auch eine beliebige, alte Revision laden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2411</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2411"/>
		<updated>2006-07-05T21:55:37Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem [http://svnbook.red-bean.com/ offiziellen Handbuch]:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten [[Diff|Diffs]] erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher [[Datenbank]]-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über [[Netzwerk|Netzwerke]] gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-[[Server]]. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als [[Deamon]] gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Client-Zugriff==&lt;br /&gt;
Am einfachsten und schnellsten ist der Einsatz der [[Kommandozeile]]. Mit dem vorherigen Paket wurden auch gleich alle benötigten Teile des Clients mitinstalliert. Alle Aufrufe finden über das Programm svn statt. Eine komplette Beschreibung der möglichen Kommandos befindet sich im [http://svnbook.red-bean.com/ offiziellen Handbuch].&lt;br /&gt;
&lt;br /&gt;
Der [[Workspace]] ist die aktuell von einem Benutzer bearbeitete Version der Referenzkopie. Es können zu jedem Zeitpunkt beliebig viele, voneinander unabhängige Workspaces von verschiedenen Benutzern gleichzeitig bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein [[Checkout]] ist das initiale Erstellen eines lokalen Workspaces als eine Kopie des aktuellen Stands des Repositories oder einer beliebigen, älteren Version davon: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn co svn://&amp;lt;server&amp;gt;/&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung von Subversion ist der jeweils gerade ausgecheckte [[Revision|Revisionsstand]].&lt;br /&gt;
&lt;br /&gt;
Um beliebige Dateien oder komplette Verzeichnisse aus dem lokalen Workspace zu dem Repository hinzuzufügen, benötigt man folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn add &amp;lt;Datei-/Pfadname&amp;gt; …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen zwei Versionen einer Datei ist nun ein [[Diff]]. Es enthält die nötigen Änderungsanweisungen, eine Datei von einem älteren Stand &#039;&#039;i&#039;&#039; auf den neueren Stand &#039;&#039;i&#039;&#039;+1 zu bringen. Wenn eine Datei im Repository aktualisiert wird, speichert Subversion nicht jedes Mal den kompletten Inhalt der Datei ab, sondern nur die Veränderungen zur jeweils älteren Version. Somit wird nicht nur Speicherplatz gespart, sondern auch die Darstellung der Änderungen erleichtert. Um stets eine gute Performance liefern zu können, liegt nicht die erste, ursprüngliche Version, sondern die jeweils aktuellste der Datei als komplette Datei vor. Gespeichert selbst werden nur die Änderungen zur Vorgängerversion. Ein [[Patch]] ist die Einarbeitung dieser Unterschiede in eine Datei mit altem Stand. Nach dem Patch ist diese auf dem neuen Stand.&lt;br /&gt;
&lt;br /&gt;
Ein [[Commit]] (Check-In) ist ein [[Diff]] des lokalen Workspaces gegen das Repository, das anschließend in das Repository gepatched wird; also das Einarbeiten der durchgeführten Änderungen im Workspace in das Repository.&lt;br /&gt;
&lt;br /&gt;
Ein Commit wird immer dann durchgeführt, wenn eine Änderung in der lokalen Kopie vorgenommen wurde und veröffentlicht werden soll. Um die eben neu hinzugefügten Dateien aus dem lokalen Workspace in das Repository zu übertragen, müssen diese eingecheckt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn ci -m &amp;quot;&amp;lt;Log-Message&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt man hierbei eine Log-Message ein, damit für jeden ersichtlich wird, was bei dieser Änderung geschehen ist. Als Rückmeldung gibt Subversion zu jeder neuen bzw. veränderten Datei die durchgeführten Aktionen und zum Schluß die neue Revision des Repositories.&lt;br /&gt;
&lt;br /&gt;
Ein [[Update]] aktualisiert den lokalen Workspace anhand der neuesten Version im Repository. Damit erhält der Benutzer den derzeit aktuellsten Stand mit allen Änderungen, die zu diesem Zeitpunk bestätigt wurden. Sollten gleichzeitig an derselben Datei von verschiedenen Benutzern, also in verschiedenen Workspaces, Änderungen durchgeführt worden sein, so kann der erste seine Änderung noch ungehindert einchecken. Der Zweite muß seinen lokalen Workspace allerdings zuerst aktualisieren (Update), bevor er seine Änderungen senden kann, da er diese Änderungen der Datei auf einen mittlerweile veralteten Stand aufgebaut hat. Dabei werden die beiden Dateien automatisch gemerged. Ein [[Merge]] führt somit verschiedene Änderungen aus zwei Dateien zu einer zusammen. Dies geht jedoch nur gut, solange die Änderungen an verschiedenen Stellen der Datei vorgenommen wurden. Betreffen die Veränderungen allerdings die gleichen Zeilen oder mittlerweile sogar gelöschte Zeilen, so tritt ein Merge-Konflikt auf, der nicht automatisch gelöst werden kann. Somit muß der zweite Benutzer beide Veränderungen analysieren und gegebenenfalls anpassen, bevor er diese endgültig eincheckt.&lt;br /&gt;
&lt;br /&gt;
Bevor man selbst Änderungen am lokalen Workspace durchführt, sollte man also seine Kopie mit einem Update auf den aktuellsten Stand bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion gibt nun Informationen zu den eben veränderten Dateien zurück. Die Möglichkeiten sind: Neu hinzugefügt, gelöscht, aktualisiert, vermischt (merge) und Konflikt. Dabei sind die letzten beiden Möglichkeiten besonders zu beachten: Bei einem Merge sollte sich der Entwickler das Ergebnis ansehen und bei einem Konflikt muß er diesen manuell beseitigen und anschließend die korrigierte Version wieder einzuchecken.&lt;br /&gt;
&lt;br /&gt;
Der Update-Befehl muß aber nicht zwangsläufig immer die aktuellste Version auschecken, sondern kann mit dem Parameter &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; auch eine beliebige, alte Revision laden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2409</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2409"/>
		<updated>2006-07-05T21:45:16Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem [http://svnbook.red-bean.com/ offiziellen Handbuch]:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten [[Diff|Diffs]] erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher [[Datenbank]]-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über [[Netzwerk|Netzwerke]] gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-[[Server]]. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als [[Deamon]] gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Client-Zugriff==&lt;br /&gt;
Am einfachsten und schnellsten ist der Einsatz der [[Kommandozeile]]. Mit dem vorherigen Paket wurden auch gleich alle benötigten Teile des Clients mitinstalliert. Alle Aufrufe finden über das Programm svn statt. Eine komplette Beschreibung der möglichen Kommandos befindet sich im [http://svnbook.red-bean.com/ offiziellen Handbuch].&lt;br /&gt;
&lt;br /&gt;
Der [[Workspace]] ist die aktuell von einem Benutzer bearbeitete Version der Referenzkopie. Es können zu jedem Zeitpunkt beliebig viele, voneinander unabhängige Workspaces von verschiedenen Benutzern gleichzeitig bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein [[Checkout]] ist das initiale Erstellen eines lokalen Workspaces als eine Kopie des aktuellen Stands des Repositories oder einer beliebigen, älteren Version davon: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn co svn://&amp;lt;server&amp;gt;/&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung von Subversion ist der jeweils gerade ausgecheckte [[Revision|Revisionsstand]].&lt;br /&gt;
&lt;br /&gt;
Um beliebige Dateien oder komplette Verzeichnisse aus dem lokalen Workspace zu dem Repository hinzuzufügen, benötigt man folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn add &amp;lt;Datei-/Pfadname&amp;gt; …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen zwei Versionen einer Datei ist nun ein [[Diff]]. Es enthält die nötigen Änderungsanweisungen, eine Datei von einem älteren Stand &#039;&#039;i&#039;&#039; auf den neueren Stand &#039;&#039;i&#039;&#039;+1 zu bringen. Wenn eine Datei im Repository aktualisiert wird, speichert Subversion nicht jedes Mal den kompletten Inhalt der Datei ab, sondern nur die Veränderungen zur jeweils älteren Version. Somit wird nicht nur Speicherplatz gespart, sondern auch die Darstellung der Änderungen erleichtert. Um stets eine gute Performance liefern zu können, liegt nicht die erste, ursprüngliche Version, sondern die jeweils aktuellste der Datei als komplette Datei vor. Gespeichert selbst werden nur die Änderungen zur Vorgängerversion. Ein Patch ist die Einarbeitung dieser Unterschiede in eine Datei mit altem Stand. Nach dem Patch ist diese auf dem neuen Stand.&lt;br /&gt;
&lt;br /&gt;
Ein [[Commit]] (Check-In) ist ein [[Diff]] des lokalen Workspaces gegen das Repository, das anschließend in das Repository gepatched wird; also das Einarbeiten der durchgeführten Änderungen im Workspace in das Repository.&lt;br /&gt;
&lt;br /&gt;
Ein Commit wird immer dann durchgeführt, wenn eine Änderung in der lokalen Kopie vorgenommen wurde und veröffentlicht werden soll. Um die eben neu hinzugefügten Dateien aus dem lokalen Workspace in das Repository zu übertragen, müssen diese eingecheckt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn ci -m &amp;quot;&amp;lt;Log-Message&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt man hierbei eine Log-Message ein, damit für jeden ersichtlich wird, was bei dieser Änderung geschehen ist. Als Rückmeldung gibt Subversion zu jeder neuen bzw. veränderten Datei die durchgeführten Aktionen und zum Schluß die neue Revision des Repositories.&lt;br /&gt;
&lt;br /&gt;
Ein [[Update]] aktualisiert den lokalen Workspace anhand der neuesten Version im Repository. Damit erhält der Benutzer den derzeit aktuellsten Stand mit allen Änderungen, die zu diesem Zeitpunk bestätigt wurden. Sollten gleichzeitig an derselben Datei von verschiedenen Benutzern, also in verschiedenen Workspaces, Änderungen durchgeführt worden sein, so kann der erste seine Änderung noch ungehindert einchecken. Der Zweite muß seinen lokalen Workspace allerdings zuerst aktualisieren (Update), bevor er seine Änderungen senden kann, da er diese Änderungen der Datei auf einen mittlerweile veralteten Stand aufgebaut hat. Dabei werden die beiden Dateien automatisch gemerged. Ein [[Merge]] führt somit verschiedene Änderungen aus zwei Dateien zu einer zusammen. Dies geht jedoch nur gut, solange die Änderungen an verschiedenen Stellen der Datei vorgenommen wurden. Betreffen die Veränderungen allerdings die gleichen Zeilen oder mittlerweile sogar gelöschte Zeilen, so tritt ein Merge-Konflikt auf, der nicht automatisch gelöst werden kann. Somit muß der zweite Benutzer beide Veränderungen analysieren und gegebenenfalls anpassen, bevor er diese endgültig eincheckt.&lt;br /&gt;
&lt;br /&gt;
Bevor man selbst Änderungen am lokalen Workspace durchführt, sollte man also seine Kopie mit einem Update auf den aktuellsten Stand bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion gibt nun Informationen zu den eben veränderten Dateien zurück. Die Möglichkeiten sind: Neu hinzugefügt, gelöscht, aktualisiert, vermischt (merge) und Konflikt. Dabei sind die letzten beiden Möglichkeiten besonders zu beachten: Bei einem Merge sollte sich der Entwickler das Ergebnis ansehen und bei einem Konflikt muß er diesen manuell beseitigen und anschließend die korrigierte Version wieder einzuchecken.&lt;br /&gt;
&lt;br /&gt;
Der Update-Befehl muß aber nicht zwangsläufig immer die aktuellste Version auschecken, sondern kann mit dem Parameter &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; auch eine beliebige, alte Revision laden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=4599</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=4599"/>
		<updated>2006-07-05T21:40:26Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
====Vorteile====&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu RCS – sind:&lt;br /&gt;
* &#039;&#039;&#039;Keine dateizentrierte Sichtweise&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Entwicklungsstil&#039;&#039;&#039;: Kopieren-Modifizieren-Zusammenfügen d.h. simultanes Arbeiten mehrerer von einander unabhängiger Entwickler möglich&lt;br /&gt;
* &#039;&#039;&#039;Informationssystem&#039;&#039;&#039; für alle (änderungsinteressierte) Entwickler des aktuellen Projekts&lt;br /&gt;
* &#039;&#039;&#039;Netzwerkfähig&#039;&#039;&#039;, d.h. Historie ist auf andere Rechner übertragbar und durchgeführte Änderungen lassen sich zuordnen&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich CVS zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von [[Subversion]] (SVN).&lt;br /&gt;
&lt;br /&gt;
====Vorteile====&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2407</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2407"/>
		<updated>2006-07-05T21:29:30Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem [http://svnbook.red-bean.com/ offiziellen Handbuch]:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher [[Datenbank]]-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über [[Netzwerk|Netzwerke]] gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-[[Server]]. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als [[Deamon]] gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Client-Zugriff==&lt;br /&gt;
Am einfachsten und schnellsten ist der Einsatz der [[Kommandozeile]]. Mit dem vorherigen Paket wurden auch gleich alle benötigten Teile des Clients mitinstalliert. Alle Aufrufe finden über das Programm svn statt. Eine komplette Beschreibung der möglichen Kommandos befindet sich im [http://svnbook.red-bean.com/ offiziellen Handbuch].&lt;br /&gt;
&lt;br /&gt;
Der [[Workspace]] ist die aktuell von einem Benutzer bearbeitete Version der Referenzkopie. Es können zu jedem Zeitpunkt beliebig viele, voneinander unabhängige Workspaces von verschiedenen Benutzern gleichzeitig bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein [[Checkout]] ist das initiale Erstellen eines lokalen Workspaces als eine Kopie des aktuellen Stands des Repositories oder einer beliebigen, älteren Version davon: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn co svn://&amp;lt;server&amp;gt;/&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung von Subversion ist der jeweils gerade ausgecheckte [[Revision|Revisionsstand]].&lt;br /&gt;
&lt;br /&gt;
Um beliebige Dateien oder komplette Verzeichnisse aus dem lokalen Workspace zu dem Repository hinzuzufügen, benötigt man folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn add &amp;lt;Datei-/Pfadname&amp;gt; …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen zwei Versionen einer Datei ist nun ein Diff. Es enthält die nötigen Änderungsanweisungen, eine Datei von einem älteren Stand &#039;&#039;i&#039;&#039; auf den neueren Stand &#039;&#039;i&#039;&#039;+1 zu bringen. Wenn eine Datei im Repository aktualisiert wird, speichert Subversion nicht jedes Mal den kompletten Inhalt der Datei ab, sondern nur die Veränderungen zur jeweils älteren Version. Somit wird nicht nur Speicherplatz gespart, sondern auch die Darstellung der Änderungen erleichtert. Um stets eine gute Performance liefern zu können, liegt nicht die erste, ursprüngliche Version, sondern die jeweils aktuellste der Datei als komplette Datei vor. Gespeichert selbst werden nur die Änderungen zur Vorgängerversion. Ein Patch ist die Einarbeitung dieser Unterschiede in eine Datei mit altem Stand. Nach dem Patch ist diese auf dem neuen Stand.&lt;br /&gt;
&lt;br /&gt;
Ein [[Commit]] (Check-In) ist ein Diff des lokalen Workspaces gegen das Repository, das anschließend in das Repository gepatched wird; also das Einarbeiten der durchgeführten Änderungen im Workspace in das Repository.&lt;br /&gt;
&lt;br /&gt;
Ein Commit wird immer dann durchgeführt, wenn eine Änderung in der lokalen Kopie vorgenommen wurde und veröffentlicht werden soll. Um die eben neu hinzugefügten Dateien aus dem lokalen Workspace in das Repository zu übertragen, müssen diese eingecheckt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn ci -m &amp;quot;&amp;lt;Log-Message&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt man hierbei eine Log-Message ein, damit für jeden ersichtlich wird, was bei dieser Änderung geschehen ist. Als Rückmeldung gibt Subversion zu jeder neuen bzw. veränderten Datei die durchgeführten Aktionen und zum Schluß die neue Revision des Repositories.&lt;br /&gt;
&lt;br /&gt;
Ein [[Update]] aktualisiert den lokalen Workspace anhand der neuesten Version im Repository. Damit erhält der Benutzer den derzeit aktuellsten Stand mit allen Änderungen, die zu diesem Zeitpunk bestätigt wurden. Sollten gleichzeitig an derselben Datei von verschiedenen Benutzern, also in verschiedenen Workspaces, Änderungen durchgeführt worden sein, so kann der erste seine Änderung noch ungehindert einchecken. Der Zweite muß seinen lokalen Workspace allerdings zuerst aktualisieren (Update), bevor er seine Änderungen senden kann, da er diese Änderungen der Datei auf einen mittlerweile veralteten Stand aufgebaut hat. Dabei werden die beiden Dateien automatisch gemerged. Ein [[Merge]] führt somit verschiedene Änderungen aus zwei Dateien zu einer zusammen. Dies geht jedoch nur gut, solange die Änderungen an verschiedenen Stellen der Datei vorgenommen wurden. Betreffen die Veränderungen allerdings die gleichen Zeilen oder mittlerweile sogar gelöschte Zeilen, so tritt ein Merge-Konflikt auf, der nicht automatisch gelöst werden kann. Somit muß der zweite Benutzer beide Veränderungen analysieren und gegebenenfalls anpassen, bevor er diese endgültig eincheckt.&lt;br /&gt;
&lt;br /&gt;
Bevor man selbst Änderungen am lokalen Workspace durchführt, sollte man also seine Kopie mit einem Update auf den aktuellsten Stand bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion gibt nun Informationen zu den eben veränderten Dateien zurück. Die Möglichkeiten sind: Neu hinzugefügt, gelöscht, aktualisiert, vermischt (merge) und Konflikt. Dabei sind die letzten beiden Möglichkeiten besonders zu beachten: Bei einem Merge sollte sich der Entwickler das Ergebnis ansehen und bei einem Konflikt muß er diesen manuell beseitigen und anschließend die korrigierte Version wieder einzuchecken.&lt;br /&gt;
&lt;br /&gt;
Der Update-Befehl muß aber nicht zwangsläufig immer die aktuellste Version auschecken, sondern kann mit dem Parameter &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; auch eine beliebige, alte Revision laden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2401</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2401"/>
		<updated>2006-07-05T20:49:26Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem [http://svnbook.red-bean.com/ offiziellen Handbuch]:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher Datenbank-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über Netzwerke gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-Server. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als Deamon gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Client-Zugriff==&lt;br /&gt;
Am einfachsten und schnellsten ist der Einsatz der Kommandozeile. Mit dem vorherigen Paket wurden auch gleich alle benötigten Teile des Clients mitinstalliert. Alle Aufrufe finden über das Programm svn statt. Eine komplette Beschreibung der möglichen Kommandos befindet sich im [http://svnbook.red-bean.com/ offiziellen Handbuch].&lt;br /&gt;
&lt;br /&gt;
Der Workspace ist die aktuell von einem Benutzer bearbeitete Version der Referenzkopie. Es können zu jedem Zeitpunkt beliebig viele, voneinander unabhängige Workspaces von verschiedenen Benutzern gleichzeitig bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein Checkout ist das initiale Erstellen eines lokalen Workspaces als eine Kopie des aktuellen Stands des Repositories oder einer beliebigen, älteren Version davon: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn co svn://&amp;lt;server&amp;gt;/&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rückmeldung von Subversion ist der jeweils gerade ausgecheckte Revisionsstand.&lt;br /&gt;
&lt;br /&gt;
Um beliebige Dateien oder komplette Verzeichnisse aus dem lokalen Workspace zu dem Repository hinzuzufügen, benötigt man folgenden Befehl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn add &amp;lt;Datei-/Pfadname&amp;gt; …&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Unterschied zwischen zwei Versionen einer Datei ist nun ein Diff. Es enthält die nötigen Änderungsanweisungen, eine Datei von einem älteren Stand &#039;&#039;i&#039;&#039; auf den neueren Stand &#039;&#039;i&#039;&#039;+1 zu bringen. Wenn eine Datei im Repository aktualisiert wird, speichert Subversion nicht jedes Mal den kompletten Inhalt der Datei ab, sondern nur die Veränderungen zur jeweils älteren Version. Somit wird nicht nur Speicherplatz gespart, sondern auch die Darstellung der Änderungen erleichtert. Um stets eine gute Performance liefern zu können, liegt nicht die erste, ursprüngliche Version, sondern die jeweils aktuellste der Datei als komplette Datei vor. Gespeichert selbst werden nur die Änderungen zur Vorgängerversion. Ein Patch ist die Einarbeitung dieser Unterschiede in eine Datei mit altem Stand. Nach dem Patch ist diese auf dem neuen Stand.&lt;br /&gt;
&lt;br /&gt;
Ein Commit (Check-In) ist ein Diff des lokalen Workspaces gegen das Repository, das anschließend in das Repository gepatched wird; also das Einarbeiten der durchgeführten Änderungen im Workspace in das Repository.&lt;br /&gt;
&lt;br /&gt;
Ein Commit wird immer dann durchgeführt, wenn eine Änderung in der lokalen Kopie vorgenommen wurde und veröffentlicht werden soll. Um die eben neu hinzugefügten Dateien aus dem lokalen Workspace in das Repository zu übertragen, müssen diese eingecheckt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn ci -m &amp;quot;&amp;lt;Log-Message&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt man hierbei eine Log-Message ein, damit für jeden ersichtlich wird, was bei dieser Änderung geschehen ist. Als Rückmeldung gibt Subversion zu jeder neuen bzw. veränderten Datei die durchgeführten Aktionen und zum Schluß die neue Revision des Repositories.&lt;br /&gt;
&lt;br /&gt;
Ein Update aktualisiert den lokalen Workspace anhand der neuesten Version im Repository. Damit erhält der Benutzer den derzeit aktuellsten Stand mit allen Änderungen, die zu diesem Zeitpunk bestätigt wurden. Sollten gleichzeitig an derselben Datei von verschiedenen Benutzern, also in verschiedenen Workspaces, Änderungen durchgeführt worden sein, so kann der erste seine Änderung noch ungehindert einchecken. Der Zweite muß seinen lokalen Workspace allerdings zuerst aktualisieren (Update), bevor er seine Änderungen senden kann, da er diese Änderungen der Datei auf einen mittlerweile veralteten Stand aufgebaut hat. Dabei werden die beiden Dateien automatisch gemerged. Ein Merge führt somit verschiedene Änderungen aus zwei Dateien zu einer zusammen. Dies geht jedoch nur gut, solange die Änderungen an verschiedenen Stellen der Datei vorgenommen wurden. Betreffen die Veränderungen allerdings die gleichen Zeilen oder mittlerweile sogar gelöschte Zeilen, so tritt ein Merge-Konflikt auf, der nicht automatisch gelöst werden kann. Somit muß der zweite Benutzer beide Veränderungen analysieren und gegebenenfalls anpassen, bevor er diese endgültig eincheckt.&lt;br /&gt;
&lt;br /&gt;
Bevor man selbst Änderungen am lokalen Workspace durchführt, sollte man also seine Kopie mit einem Update auf den aktuellsten Stand bringen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subversion gibt nun Informationen zu den eben veränderten Dateien zurück. Die Möglichkeiten sind: Neu hinzugefügt, gelöscht, aktualisiert, vermischt (merge) und Konflikt. Dabei sind die letzten beiden Möglichkeiten besonders zu beachten: Bei einem Merge sollte sich der Entwickler das Ergebnis ansehen und bei einem Konflikt muß er diesen manuell beseitigen und anschließend die korrigierte Version wieder einzuchecken.&lt;br /&gt;
&lt;br /&gt;
Der Update-Befehl muß aber nicht zwangsläufig immer die aktuellste Version auschecken, sondern kann mit dem Parameter &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; auch eine beliebige, alte Revision laden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2400</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2400"/>
		<updated>2006-07-05T20:44:28Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Server Einrichten==&lt;br /&gt;
Das [[Repository]], auch Archiv genannt, ist eine zentrale Referenzkopie aller Daten des Projektes inklusive der gesamten Versionsgeschichte, also aller alten Stände. Dieser Datenbestand wird auf dem Subversion-Server gespeichert und verwaltet. &lt;br /&gt;
&lt;br /&gt;
Um ein neues SVN-Repository anzulegen, ist folgender Aufruf nötig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnadmin create &amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für &amp;lt;code&amp;gt;&amp;lt;repository&amp;gt;&amp;lt;/code&amp;gt; wird das anzulegende Unterverzeichnis, also der Repository-Name, angegeben. Als optionaler Parameter kann übergeben werden, welcher Datenbank-Typ das Repository verwenden soll. Standardmäßig wird fsfs ausgewählt. Folgende zwei Möglichkeiten stehen zur Auswahl, wobei jede ihre Vor- und Nachteile hat. Die genauen Unterschiede werden in beschrieben. Im allgemeinen wird aber eher zu fsfs geraten:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Berkeley DB&#039;&#039;&#039;: Dieses Repository baut auf der Berkeley Datenbank auf und ist seit 2001 im Einsatz. Das System ist sehr anfällig gegenüber Unterbrechungen und wird dann schnell instabil, auch belegt das Repository etwas mehr Speicher als mit fsfs. Dafür skaliert die Datenbank besser, wenn extrem viele Revisions-Bäume existieren. Sie ist ebenfalls etwas schneller, wenn nur die aktuelle Revision ausgecheckt werden soll. Bei vielen Dateien pro Revision ist sie jedoch wieder langsamer und hat Probleme, wenn verschiedene Benutzergruppen darauf zugreifen. Vorteil wiederum ist, daß vom kompletten System während der Laufzeit ein Backup gemacht werden kann.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fsfs&#039;&#039;&#039; baut auf gar keiner Datenbank, sondern nur auf dem Dateisystem, auf. Es ist ziemlich unempfindlich gegenüber Unterbrechungen und kann auch von Read-Only-Laufwerken und über Netzwerke gemounted werden. Das Repository ist etwas kleiner, hat aber bei veralteten Dateisystemen Skalierungsprobleme, wenn mehrere tausend Dateien in einem Verzeichnis existieren. Beim Einchecken großer Daten ist es etwas schneller, bei der aktuellen Revision dafür einen Moment langsamer. fsfs wird seit 2004 eingesetzt und die Programmierer empfehlen – außer es sprechen gute Gründe dagegen – alte Berkeley-DBs auf das fsfs-System umzuwandeln.&lt;br /&gt;
&lt;br /&gt;
Um das nun erstellte Repository online zu stellen und den SVN-Server zu starten, existieren prinzipiell zwei Möglichkeiten: Als Apache-Plugin oder als Standalone-Server. Hier soll der einfachere Weg über den Server erklärt werden:&lt;br /&gt;
&lt;br /&gt;
Zuerst muß noch festgelegt werden, wer welchen Zugriff und welche Rechte besitzt. Dies geschieht in den Dateien &amp;lt;code&amp;gt;conf/svnserv.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conf/authz&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf/passwd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um den Server nun zu starten, ist aus dem SVN-Root Verzeichnis, welches die einzelnen Repositories enthält, folgendes Kommando notwendig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svnserve –d –r .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; bewirkt, daß der Dienst als Deamon gestartet wird und &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt; gibt das SVN-Root-Verzeichnis an – im obigen Fall also das aktuelle, da wir uns schon im richtigen Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2405</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2405"/>
		<updated>2006-07-05T20:30:47Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich CVS zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von [[Subversion]] (SVN).&lt;br /&gt;
&lt;br /&gt;
====Hauptvorteile====&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Kategorie:Versionsverwaltung&amp;diff=4608</id>
		<title>Kategorie:Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Kategorie:Versionsverwaltung&amp;diff=4608"/>
		<updated>2006-07-05T20:28:55Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Kategorie:Versionsverwaltung&amp;diff=2394</id>
		<title>Kategorie:Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Kategorie:Versionsverwaltung&amp;diff=2394"/>
		<updated>2006-07-05T20:28:42Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:xy-eltern]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2399</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2399"/>
		<updated>2006-07-05T20:24:43Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
[[Kategorie:Versionsverwaltung]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2396</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2396"/>
		<updated>2006-07-05T20:23:39Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich CVS zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von [[Subversion]] (SVN).&lt;br /&gt;
&lt;br /&gt;
====Hauptvorteile====&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2392</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2392"/>
		<updated>2006-07-05T20:22:44Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich CVS zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von [[Subversion]] (SVN).&lt;br /&gt;
&lt;br /&gt;
====Hauptvorteile====&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
* Don Bolinger, Tan Bronson, Applying RCS and SCCS, O&#039;REILLY, 1. September 1995, ISBN 1565921178&lt;br /&gt;
* Gregor N. Purdy, CVS kurz &amp;amp; gut, O’Reilly Verlag, Köln, 1., korrigierter Nachdruck Dezember 2001, ISBN 3-89721-229-3&lt;br /&gt;
* Derek Robert Price &amp;amp; Ximbiot, CVS - Concurrent Versions System, [http://www.nongnu.org/cvs/ CVS-Homepage]&lt;br /&gt;
* Karl Fogel, Moshe Bar, Open Source-Projekte mit CVS, Verteilte Softwareentwicklung mit dem Concurrent Versions System, mitp-Verlag, Bonn, 2., erweiterte und überarbeitete Auflage 2002, ISBN 3-8266-0816-x&lt;br /&gt;
* Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,  Version Control with Subversion, For Subversion 1.1, book compiled from Revision 1337, 2005, [http://svnbook.red-bean.com/ http://svnbook.red-bean.com/]&lt;br /&gt;
* CollabNet, Inc., Subversion Homepage, [http://subversion.tigris.org/ Subversion-Homepage]&lt;br /&gt;
&lt;br /&gt;
* [http://better-scm.berlios.de/comparison/comparison.html Vergleich von 13 Versionsverwaltungen] (en.)&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2391</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2391"/>
		<updated>2006-07-05T20:09:38Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich CVS zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von [[Subversion]] (SVN).&lt;br /&gt;
&lt;br /&gt;
====Hauptvorteile====&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2393</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2393"/>
		<updated>2006-07-05T20:06:58Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2389</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2389"/>
		<updated>2006-07-05T20:06:03Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Subversion==&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
===Hauptvorteile===&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Geschichte==&lt;br /&gt;
===SCCS===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===RCS===&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===CVS===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
==Siehe auch==&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2388</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2388"/>
		<updated>2006-07-05T20:04:26Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
=Definition=&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
==Hauptvorteile==&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Beispiele=&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geschichte=&lt;br /&gt;
==SCCS==&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
==RCS==&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
==CVS==&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2390</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2390"/>
		<updated>2006-07-05T20:02:55Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist das [[Concurrent Versions System]] (CVS). In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2385</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2385"/>
		<updated>2006-07-05T20:01:52Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist [[Concurrent Versions System|CVS]], das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2384</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2384"/>
		<updated>2006-07-05T19:58:22Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System|&#039;&#039;&#039;Source Code Control System&#039;&#039;&#039;]] (SCCS) war eine der ersten [[Versionsverwaltung|Versionsverwaltungen]]. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Das [[Revision Control System|&#039;&#039;&#039;Revision Control System&#039;&#039;&#039;]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist [[Concurrent Versions System|CVS]], das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2382</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2382"/>
		<updated>2006-07-05T19:56:39Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das &#039;&#039;&#039;Source Code Control System&#039;&#039;&#039; (SCCS) war eine der ersten [[Versionsverwaltung|Versionsverwaltungen]]. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]] war das [[Revision Control System|RCS]] ([[Revision Control System]]), das 1985 von Walter Tichy an der Purdue University entwickelt wurde. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist [[Concurrent Versions System|CVS]], das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2381</id>
		<title>Versionsverwaltung</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Versionsverwaltung&amp;diff=2381"/>
		<updated>2006-07-05T19:55:34Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Eine Versionsverwaltung hat die Aufgabe, den Werdegang eines Projektes zu protokollieren. Sie übernimmt die Versionierung und die Archivierung der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
==Open-Source-Versionsverwaltungen==&lt;br /&gt;
===[[Source Code Control System|SSCS]]===&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
===[[Revision Control System|RCS]]===&lt;br /&gt;
Die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]] war das [[Revision Control System|RCS]] ([[Revision Control System]]), das 1985 von Walter Tichy an der Purdue University entwickelt wurde. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
===[[Concurrent Versions System|CVS]]===&lt;br /&gt;
Die Weiterentwicklung von RCS ist [[Concurrent Versions System|CVS]], das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
===[[Subversion|SVN]]===&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2386</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2386"/>
		<updated>2006-07-05T19:51:41Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
=Definition=&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
==Hauptvorteile==&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Beispiele=&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geschichte=&lt;br /&gt;
==SCCS==&lt;br /&gt;
Das [[Source Code Control System]] (SCCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
==RCS==&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
==CVS==&lt;br /&gt;
Die Weiterentwicklung von RCS ist CVS, das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2367</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2367"/>
		<updated>2006-07-05T19:45:55Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
=Definition=&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
==Hauptvorteile==&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Beispiele=&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geschichte=&lt;br /&gt;
==SSCS==&lt;br /&gt;
Das [[Source Code Control System]] (SSCS) war eine der ersten Versionsverwaltungen. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
==RCS==&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Es wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
==CVS==&lt;br /&gt;
Die Weiterentwicklung von RCS ist CVS, das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2359</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2359"/>
		<updated>2006-07-05T19:43:43Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
=Definition=&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
==Hauptvorteile==&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisversionierung&#039;&#039;&#039;: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Echte Versionsgeschichte&#039;&#039;&#039;: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* &#039;&#039;&#039;Atomare Commits&#039;&#039;&#039;: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* &#039;&#039;&#039;Versionierte Metadaten&#039;&#039;&#039;: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* &#039;&#039;&#039;Auswahl der Netzwerkschicht&#039;&#039;&#039;: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* &#039;&#039;&#039;Konsistentes Datenmanagement&#039;&#039;&#039;: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* &#039;&#039;&#039;Effizientes Branching und Tagging&#039;&#039;&#039;: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* &#039;&#039;&#039;API&#039;&#039;&#039;: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Beispiele=&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geschichte=&lt;br /&gt;
==SSCS==&lt;br /&gt;
Eine der ersten Versionsverwaltungen war das [[Source Code Control System]], kurz SSCS. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
==RCS==&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Sie wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
==CVS==&lt;br /&gt;
Die Weiterentwicklung von RCS ist CVS, das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2358</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2358"/>
		<updated>2006-07-05T19:43:02Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
=Definition=&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
==Hauptvorteile==&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* Verzeichnisversionierung: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* Echte Versionsgeschichte: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* Atomare Commits: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* Versionierte Metadaten: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* Auswahl der Netzwerkschicht: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* Konsistentes Datenmanagement: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* Effizientes Branching und Tagging: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* API: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: &amp;lt;tt&amp;gt;cvs2svn&amp;lt;/tt&amp;gt; (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Beispiele=&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geschichte=&lt;br /&gt;
==SSCS==&lt;br /&gt;
Eine der ersten Versionsverwaltungen war das [[Source Code Control System]], kurz SSCS. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
==RCS==&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Sie wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
==CVS==&lt;br /&gt;
Die Weiterentwicklung von RCS ist CVS, das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2357</id>
		<title>Subversion</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Subversion&amp;diff=2357"/>
		<updated>2006-07-05T19:38:46Z</updated>

		<summary type="html">&lt;p&gt;Chriss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{In Bearbeitung}}&lt;br /&gt;
&lt;br /&gt;
=Definition=&lt;br /&gt;
Eine [[Versionsverwaltung]] hat die Aufgabe, den Werdegang eines [[Projekt|Projektes]] zu protokollieren. Sie übernimmt die [[Versionierung]] und die [[Archivierung]] der Daten und ermöglicht den gemeinsamen Zugriff darauf. Dabei kann jede Änderung und jeder Stand verfolgt, rückgängig gemacht oder wiederhergestellt werden.&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
Bis zum Jahr 2000 entwickelte sich [[Concurrent Versions System|CVS]] zum de-facto-Standard in der Open-Source-Gemeinde. Allerdings tauchten zunehmend Bugs und umständliches und fehlerhaftes Verhalten von CVS auf, was Anfang 2000 CollabNet Inc. [CN06] dazu veranlaßte, Entwickler für eine Ablösung von CVS zu suchen. Ziel war es, eine komplett neue Versionsverwaltung, auf einigen guten Ideen von CVS aufbauend, zu entwickeln – allerdings ohne dessen Fehler und zusätzlich den Anforderungen der modernen Softwareentwicklung angepaßt. Im Februar 2000 begannen dann Karl Fogel und sein Freund Jim Blandy mit der Entwicklung von Subversion.&lt;br /&gt;
&lt;br /&gt;
==Hauptvorteile==&lt;br /&gt;
Die Hauptvorteile – als Verbesserung zu CVS – sind nach dem offiziellen Handbuch:&lt;br /&gt;
* Verzeichnisversionierung: Nicht nur einzelne Dateien, sondern der komplette Verzeichnisbaum wird mitversioniert.&lt;br /&gt;
* Echte Versionsgeschichte: Dateien und Verzeichnisse können nun auch kopiert und umbenannt werden, ohne deren Historie zu verlieren.&lt;br /&gt;
* Atomare Commits: Ein Befehl wird nun entweder komplett oder gar nicht ausgeführt. So ist es unmöglich, daß nach einem Fehler in einer Datei alle bisherigen Veränderungen erhalten bleiben.&lt;br /&gt;
* Versionierte Metadaten: Jede Datei oder jedes Verzeichnis kann beliebige, zusätzliche Informationen – in Form von Schlüssel- und Wertepaaren – enthalten. Diese Informationen werden mitversioniert.&lt;br /&gt;
* Auswahl der Netzwerkschicht: Subversion kommt entweder als Apache-Erweiterung oder als leichtgewichtiger Standalone-Server.&lt;br /&gt;
* Konsistentes Datenmanagement: Nun können nicht nur aus Textdateien sondern auch aus Binärdaten Diffs erzeugt werden.&lt;br /&gt;
* Effizientes Branching und Tagging: Der Aufwand steigt nun nicht mehr proportional zur Projektgröße an sondern ist immer gleich effizient.&lt;br /&gt;
* API: Subversion kommt als eine Sammlung gemeinsamer C-Bibliotheken mit einer gut definierten API, auf die auch von externen Anwendungen zugegriffen werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein weiterer großer Vorteil, der zu dem großen Erfolg von Subversion geführt hat, ist die einfache Konvertierung eines alten CVS-Repositories in ein Subversion-Repository ohne Informationsverlust mit nur einem Befehl: cvs2svn (CVS to Subversion Repository Converter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Beispiele=&lt;br /&gt;
Beispiele machen sich auch nicht schlecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geschichte=&lt;br /&gt;
==SSCS==&lt;br /&gt;
Eine der ersten Versionsverwaltungen war das [[Source Code Control System]], kurz SSCS. Es wurde Anfang der Siebziger von Marc Rochkind bei AT&amp;amp;T entwickelt. Dieses System konnte schon mehrere Versionen einer Datei verwalten. Da es aber in jeder Hinsicht modernen Systemen unterlegen ist, existieren heutzutage praktisch keine Projekte mehr damit.&lt;br /&gt;
&lt;br /&gt;
==RCS==&lt;br /&gt;
Das [[Revision Control System]] (RCS) war die erste große Versionsverwaltung im [[Open Source|Open-Source-Bereich]]. Sie wurde 1985 von Walter Tichy an der Purdue University entwickelt. Dabei kam zum ersten Mal eine Technik mit dem Namen Lock-Modify-Unlock-Mechanismus zum Einsatz. Damit können mehrere Benutzer auf eine gemeinsame Datei lesend zugreifen. Soll eine Änderung vorgenommen werden, muß die entsprechende Datei zuerst gesperrt werden. Danach kann kein anderer Benutzer die Datei mehr bearbeiten, bis diese wieder freigegeben wird. So wird zu jeder Zeit sichergestellt, daß nicht mehrere Benutzer gleichzeitig eine Datei verändern.&lt;br /&gt;
&lt;br /&gt;
==CVS==&lt;br /&gt;
Die Weiterentwicklung von RCS ist CVS, das [[Concurrent Versions System]]. In den Anfängen, noch von Dick Grune in Shell-Skripten implementiert, wurde es dann 1989 von Jeff Polk und Brian Berliner in [[C]] komplett neu implementiert. Die größten Neuerungen waren sicherlich die eingeführte Client-Server-Architektur und der implementierte Copy-Modify-Merge-Mechanismus. Im Gegensatz zu RCS wird nichts gesperrt, sondern der aktuelle Stand vor einer Änderung in einen lokalen Workspace kopiert, indem dann auch die Änderungen stattfinden. Bei der abschließenden Veröffentlichung der Daten werden die Änderungen mit dem zentralen Repository wieder abgeglichen. Dadurch war es zum ersten Mal möglich, daß viele Benutzer gleichzeitig am selben Projekt, ja sogar in denselben Dateien, arbeiten konnten. Unterstützend kam noch hinzu, daß nicht, wie bisher, jede Datei komplett unabhängig von den anderen betrachtet wurde, sondern, daß nun Gruppen von Dateien zu Modulen zusammengefaßt werden konnten.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
*Hinz und Kunz, &amp;quot;Der Bau einer Musterseite&amp;quot;, 7. Auflage, Wiki-Verlag, 1931&lt;br /&gt;
*[[Kowarschick, W. et al. (2005): Musterquelle]]&lt;br /&gt;
*[http://kowa.fh-augsburg.de Kowarschicks gesammelte Werke]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
Zu guter letzt kann Sekundärliteratur angegeben werden, die zwar im Artikel nicht direkt verwendet, aber doch irgendwie interessant ist.&lt;br /&gt;
Außerdem sollten eine oder mehrere Kategorien angegeben werden sowie ein Verweis auf den zugehörigen englischen Artikel&lt;br /&gt;
in [[GlossaryWiki:Main Page|GlossaryWiki]], auch wenn es diesen noch gar nicht gibt.&lt;br /&gt;
&lt;br /&gt;
*[[Theory of Constraints (Quellen)]] (eine ganze Sammlung von Quellen in einem Quellen-Dokument)&lt;br /&gt;
*[[Wikipedia:Wikipedia:Formatvorlagen|Wikipedia: Formatvorlagen]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Chriss</name></author>
	</entry>
</feed>