Rudometov.COM               

usEnglish       ruRussian       deGerman      

Enschuldigung, nur Computerübersetzung

Die Kriptografichesky Methoden der Sicherung in den Programmiersprachen

Wiktor Rudometov

Die Hauptprobleme und die Weisen ihrer Lösung

Je nach dem Übergang von der Epoche der industriellen Zivilisation zu vorzugsweise informativ wächst die Rolle angesammelt und der entsprechenden Weise des bearbeiteten Wissens merklich. Das Erscheinen und die ungestüme Entwicklung der Computernetze hat die wirksamen Weisen der Datenübertragung und den schnellen Zugriff zu den Informationen wie für die abgesonderten Menschen, als auch für die großen Organisationen gewährleistet. Doch können die lokalen und globalen Computernetze im übrigen wie auch andere Weisen der Sendung der Informationen, die Drohung für die Sicherheit der Daten, besonders beim Fehlen der adäquaten Maße ihrer Sicherung vom unberechtigten Zugriff vorstellen.

So werden jetzt, je nach dem Entstehen der informativen Gesellschaft des Sicherungsmittels eine der Haupttools. Sie gewährleisten die Vertraulichkeit, die Geheimhaltung, das Vertrauen, die Autorisation, die elektronischen Zahlungen, die korporative Sicherheit und eine unzählbare Menge anderer wichtiger Attribute des modernen Lebens.

In diesem Zusammenhang gewinnt das Vorhandensein der eingebauten Mechanismen der Sicherung der Informationen und die Effektivität ihrer Arbeit in den angewandten Systemen den bestimmenden Wert bei der Auswahl von den Konsumenten der optimalen Lösung immer öfter. Deshalb widmen den gegebenen Fragen die Aufmerksamkeit die Hersteller der Software schon seit langem. Das gehörige Niveau der Sicherung können kriptograficheskie die Methoden gewährleisten.

Die mathematische Kryptographie ist wie die Wissenschaft über die Chiffrierung — die Wissenschaft über kriptosistemah entstanden . Im klassischen Modell des Systems der geheimen Verbindung gibt es zwei Teilnehmer, die geheim (vertraulich) die Informationen, die nicht für die dritten Personen vorbestimmt sind übergeben müssen. Die vorliegende Aufgabe über die Versorgung der Vertraulichkeit, der Sicherung der geheimen Informationen vor dem äusserlichen Gegner, ist eine der ersten Aufgaben der Kryptographie.

Es existiert etwas Herangehen an die Lösung der gestellten Aufgabe.

Erstens, man kann versuchen, den absolut sicheren und anderen unzugänglichen Verbindungskanal zu erstellen. Leider, es zu erreichen es ist wenigstens auf dem existierenden Niveau der modernen Entwicklung der Wissenschaft und der Technik, die die Methoden und die Mittel nicht nur die Sendungen der Informationen gewähren, sondern auch unbefugt zu ihr des Zugriffes äußerst kompliziert.

Das zweite Herangehen ist die Nutzung der allgemeinverständlichen Verbindungskanäle und das Verstecken der Tatsache der Sendung irgendwelcher Informationen. Mit der gegebenen Richtung beschäftigt sich die Wissenschaft die Stenografie. Leider, die Methoden der Stenografie können das hohe Niveau der Vertraulichkeit der Informationen nicht garantieren.

Die dritte Weise ist den allgemeinverständlichen Verbindungskanal zu verwenden, aber, die Daten in der umgewandelten Art zu übergeben, so, um, sie wieder herstellen konnte nur das Ziel. Von der Entwicklung der Methoden des Umwandelns der Informationen, die ihre Chiffrierung gewährleisten, beschäftigt sich die Kryptographie eben.

Rechtzeitig wurde das Gebiet der Anwendung der Kryptographie ausgedehnt eben ist weit vom Anfangsziel vorausgeeilt. Als Beispiel kann man dieser Lage das folgende Beispiel betrachten. Wir werden zulassen, der Klient der Bank ist beabsichtigt, das Geld von der Rechnung in der Hinsicht irgendwelcher Organisation zu übersenden. Hier ist nötig es zu bemerken, was nicht die übergebenen Informationen vertraulich sind. Wirklich, man muss nur die Bankangaben übersenden, die allgemeinbekannt und allgemeinverständlich sind. Doch ist es der Bank wichtig, sich zu überzeugen, dass das Geld gerade ihr Besitzer, und nicht der Übeltäter übersetzen will. Der Klient ist dafür interessiert, dass die Summe nicht geändert ist, und niemand könnte das Geld von seinem Namen übersenden oder, die Informationen über den Empfänger des Geldes tauschen.

Man braucht zu bemerken, dass kriptosistema nach einer bestimmten Methodologie (der Prozedur arbeitet).

Diese Methodologie sieht die Nutzung vor:

·        eines oder mehrerer Algorithmen der Chiffrierung, die man in Form von den mathematischen Formelen äußern kann;

·        der Schlüssel, die von den gegebenen Algorithmen der Chiffrierung verwendet werden,

·        des Managementsystemes von den Schlüsseln,

·        des nicht chiffrierten Textes,

·        des chiffrierten Textes (shifrteksta).

Das Beispiel des Schemas der Methodologie der Chiffrierung mit der Nutzung der Schlüssel ist auf der Abb. 1 vorgestellt .

Die Abb. 1. Das Beispiel des Schemas der Chiffrierung.

Die Klassifikation kriptograficheskih der Algorithmen

Es existieren zwei Methodologien mit der Nutzung der Schlüssel: symmetrisch, vorsehend die Anwendung des geheimen Schlüssels, und asymmetrisch — mit dem offenen Schlüssel. Jede Methodologie verwendet die eigenen Prozeduren, die Weisen der Zuordnung der Schlüssel, ihre Typen und die Algorithmen der Chiffrierung und die Entziffern.

In symmetrisch (symmetric) der Methodologie mit dem geheimen Schlüssel wird ein Schlüssel, mit dessen Hilfe wie die Chiffrierung erzeugt wird, als auch das Entziffern vom ein und derselbe Algorithmus der symmetrischen Chiffrierung verwendet. Dieser Schlüssel wird zwei Teilnehmern der Wechselwirkung in der sicheren Weise bis zur Sendung der chiffrierten Daten übergeben. Problem ist die Tatsache, dass, die geheimen Schlüssel ziemlich schwierig sicher zu verbreiten. Auf die Vorzüge des vorliegenden Systems kann man die verhältnismäßig große Schnelligkeit bei der Chiffrierung und dem Entziffern der übergebenen Mitteilungen bringen.

Ein Beispiel der ständigen Nutzung der symmetrischen Methodologie ist das Netz der Bankomaten ATM. Diese Systeme sind die originellen Entwicklungen der sie besitzenden Banken werden nicht verkauft.

In asymmetrisch (asymmetric) der Methodologie mit dem offenen Schlüssel werden zwei zusammengebundene Schlüssel verwendet. Einer der Schlüssel wird im Geheimnis bewahrt, und anderer wird in den offenen Quellen veröffentlicht. Die Daten, die vom einem Schlüssel chiffriert sind, können nur von anderem Schlüssel entziffert sein. Einer der wichtigsten Mängel ist eine Notwendigkeit der Nutzung sehr groß nach dem Umfang der Schlüssel für die Versorgung der Sicherheit, dass, gewiß, auf die Geschwindigkeiten der Arbeit der Algorithmen der Chiffrierung widergespiegelt wird.

Oft werden beider Methodologie kombiniert. Zum Beispiel, wird symmetrisch (geheim) den Schlüssel generiert, der mit Hilfe der Algorithmen der asymmetrischen Methodologie übergeben wird.

Auf die verbreiteten Algorithmen der symmetrischen Methodologie kann man DES (Data Encryption Standard), 3.DES, RC2, RC4 und RC5 bringen. Beispiel asymmetrisch sind RSA und ECC. Und die abgesonderte Position nimmt einer der populärsten Algorithmen der digitalen Unterschrift DSA (Digital Signature Algorithm) ein.

Die Aktualität des Problems der Sicherung der Ganzheit oder der Vertraulichkeit der Informationen war in alle Uhrzeiten offensichtlich. Aber besonders scharf wurde sie mit der Entwicklung der informativen Technologien, insbesondere des Wide Area Networks das Internet gezeigt. Dieses Netz gewährleistet die bequeme, operative Weise der Verbindung. Die Nutzung der speziellen Mittel gewährleistet die notwendigen Niveaus der Vertraulichkeit. Dabei muss sich im modernen Leben der Benutzer des Rechners mit solchen sehr komplizierten Algorithmen, wie RSA oder DSA nicht selten treffen. Daraufhin veranlasst schon fast bei niemandem das Erstaunen die Möglichkeit der Nutzung der digitalen Unterschrift oder sogar die Chiffrierung der Briefe der E-Mail E-mail (die Abb. 2).

Die Abb. 2. Das Beispiel der Möglichkeit der Nutzung kriptograficheskih der Systeme der Sicherung bei der Abfahrt der Informationen durch das Internet

Das Vorhandensein der eingebauten Mechanismen der Sicherung der Informationen in den angewandten Systemen gewinnt den bestimmenden Wert bei der Auswahl von ihren Konsumenten immer öfter. Deshalb widmen der gegebenen Frage die Aufmerksamkeit die Hersteller der Software schon seit langem.

Leider, die Arbeit nach der Bildung und der Prüfung fordern kriptograficheskoj die Sicherungen die wesentlichen Finanzaufwände. Außerdem es sind die qualifizierten Mitarbeiter zum Beispiel kriptografy und die Programmierer mit hooshim von der mathematischen Bildung notwendig. Gerade diese Faktoren bestimmen die Qualität der Entwicklung und der Realisierung der universellen Interfaces mit den grossen Gesellschaften in bedeutendem Grade.

Viele Firmen, einschließlich die größten Systemintegratoren, kriptograficheskuju die Sicherung in den angewandten Systemen verwendend, sind gegangen nach den Pfaden der Realisierung der universellen Interfaces. Zu ihren Aufgaben gehört die Überlassung der Anwendung des breiten Satzes der Möglichkeiten nach dem Aufruf kriptograficheskih der Services. Solches Herangehen gewährleistet die Flexibilität des Systems und ihre bestimmte Unabhängigkeit von den Algorithmen. Im Ergebnis solchen Herangehens den Herstellern der Software gibt es keine Notwendigkeit, dem nachzudenken, welche Algorithmen kriptograficheskoj der Sicherung in ihrem Produkt verwendet werden werden. Es werden nur die Interfaces der Aufrufe der Funktionen der Sicherung, die von den aussenstehenden Produzenten erstellt sind verwendet.

Zum Beispiel kann die Firma Sun Microsystems, die den Herstellern der Software die Sprache Java mit dem breiten Satz der Interfaces anbietet, realisierend wesentlich kriptograficheskie die Algorithmen und die Protokolle dienen.

Die Kryptographie in Java

Eine Sprache Java betrachtend, ist nötig es zu erinnern, dass diese Sprache verhältnismäßig vor kurzem erstellt ist und hat wie eine Menge der Vorzüge, als auch es ist nicht wenig Mängel. Oft führen die Vorzüge auf die Möglichkeit der Bildung der maschinenunabhängigen Anwendungen zurück. Doch existieren auch andere, möglich, sogar wichtiger unter den Bedingungen der ungestümen Entwicklung der informativen Gesellschaft. Es handelt sich zum Beispiel um die Netzausrichtung bei der Entwicklung der Sprache. In 1993 hat die Gesellschaft Sun die Größe der Popularität des Internets und des Anfanges beachtet, Java so damit die geschriebenen Programme auszuarbeiten man konnte aus Web-brouzerov (die Appleten) ausführen. Auch waren in die Sprache auch die erweiterten Möglichkeiten der Bildung der Anwendungen des Typs der Klient/Server eingebaut.

In Zusammenhang mit der offenbaren Netzausrichtung der Sprache Java wurde gefordert, die gehörige Aufmerksamkeit den Sicherungsmitteln zu widmen. In erster Linie betrifft es die Übersendung der wichtigen Daten zwischen dem zum Beispiel Klienten und dem Server, sowie des Startens der Programme oder der Appleten. Solche Mittel waren in den Satz der standardmäßigen Bibliotheken (JDK security API) entwickelt und eingebaut.

Zum Beispiel der Notwendigkeit der Sicherung kann der Wunsch des Benutzers-Empfängers dienen, die Möglichkeit der Verifizierung zu haben, was bestimmte Garantien der Authentizität des Dokumentes oder die Coda gibt. Als das unterschriebene Objekt können die Appleten auftreten, die im Internet breit verbreitet sind. Daraufhin erscheint beim Empfänger die Überzeugung, dass die Informationen gerade vom erwarteten Absender bekommen sind, und nicht des möglichen Übeltäters, war im Laufe der Übersendung nicht geändert. Für die derartige Versorgung der Sicherheit dienen die digitalen Unterschriften und die Zertifikate.

Den Algorithmus DSA

Die Hauptidee der digitalen Unterschrift (digital signature) besteht im Folgenden.

Wir werden zulassen, der Absender will dem Empfänger einige Daten schicken. Er "unterschreibt" das Dokument oder die Kennzahl mit Hilfe des speziellen geschlossenen Schlüssels (private key). Dieser Schlüssel wird mit Hilfe des Dienstprogrammes keytool oder den Mitteln API generiert. In diesem Fall "unterschreibt" bedeutet, dass die spezielle digitale Unterschrift mit Hilfe des Dienstprogrammes jarsigner oder den Mitteln API generiert wird.

Das Diagramm, das den Durchgang durch alle Etappen der Unterschrift des jar-Archives illustriert (die Arbeit des Absenders), ist auf der Abb. 3 vorgestellt . Es ist nötig zu bemerken, dass in der jar-Datei willkürliche Daten zum Beispiel das Programm, das Bild oder das Dokument Word sein können.

Die Abb. 3. Die Reihenfolge der Handlungen bei der Unterschrift des jar-Archives.

Das Diagramm, das die Arbeit des Empfängers des jar-Archives illustriert, ist auf der Abb. 4 vorgestellt .

Die Abb. 4. Die Reihenfolge der Handlungen bei der Verifizierung des bekommenen jar-Archives.

Im Laufe der Erzeugung des geschlossenen Schlüssels, wird auch der sogenannte offene Schlüssel (public key) erstellt, der "dem Geschlossenen"entspricht".

Dem Empfänger begeben sich die folgenden Daten:

1.     Das Quelldokument oder die Kennzahl,

2.     Die digitale Unterschrift (oder abgesondert, oder im Bestande von der jar-Datei),

3.     Den offenen Schlüssel.

Der Empfänger, alle drei Komponenten übernommen, bestimmt mit Hilfe des offenen Schlüssels die Authentizität der Unterschrift und die Ganzheit des Dokumentes. Die Geborgenheit der gegebenen Methode besteht darin, dass man für die Fälschung oder den Einbruch den geschlossenen Schlüssel erzeugen muss. Dabei existiert für die vorliegende Aufgabe "der schnelle" Algorithmus nicht unter der Bedingung, dass die Länge der Schlüssel ziemlich groß ist.

Aber die angegebene einfache Methode hat die Mängel und die Unexaktheiten. Es handelt sich darum, dass der Empfänger im angebotenen Schema die Authentizität und die Ganzheit des offenen Schlüssels wissentlich vermutet. Doch konnte der Übeltäter oder auswechseln den offenen Schlüssel ändern, und, also, die falsche Unterschrift zu erzeugen und das Dokument auszuwechseln. Es ist der Mechanismus, der die Authentizität des offenen Schlüssels beglaubt so notwendig.

Zum Beispiel können die Zertifikate (certificate) dienen. Sie werden von den aussenstehenden Organisationen geliefert eben beinheilten den offenen Schlüssel und einige zusätzliche Informationen. Als die Letzte treten die Informationen über den Absender, die Daten über den Lieferanten des Zertifikates und die digitale Unterschrift, gebend eine bestimmte Garantie auf, dass der offene Schlüssel dem Absender gehört.

In solcher Situation, wenn das Vertrauen dem Verfasser des Zertifikates vorhanden ist, das Problem kann man entschieden halten. Andernfalls muss man wenden zu noch ein aussenstehend Organisationen und das neue Zertifikat, das die Authentizität des schon vorhandenen Zertifikates beglaubt abfragen. Und so weiter, bis der Benutzer nicht nejdet die Organisation, der er vollständig anvertrauen kann. Andernfalls kann man zu verwenden die selbstunterschriebenen Zertifikate (CSR) versuchen.

Man braucht zu bemerken, dass für den Beweis der Komplexität "des Einbruches" der gegebenen Methode die kolossalen mathematischen Forschungen gefordert wurden.

Wir betrachten eine Möglichkeit der Nutzung Java Security für die Erzeugung und die Verifizierung der digitalen Unterschrift.

Die Arbeit des Absenders

Die Abb. 5. Das Schema der Handlungen bei der Erzeugung der Unterschrift

Die Erzeugung der Schlüssel

Der Programmierer, in die mathematischen Formelen und ihre Besonderheiten realizatsiii nicht eindringend, kann die schon zugänglichen fertigen Algorithmen und die Methoden der Kryptographie verwenden. Sie werden von bestimmten Organisationen, den sogenannten Providern (provider) gewährt. Die Standardmäßig eingebauten Mittel Java liefert der Provider "SUN". So man einzig, dass machen muss, es, eigentlich den Algorithmus und den Dienstanbieter zu bezeichnen.

In erster Linie muss man ein Paar Schlüssel - public key und private key erzeugen. Dazu wird die Klasse KeyPairGenerator verwendet. Für das Erhalten des konkreten Objektes dieser Klasse muss man static factory die Methode getInstance () veranlassen. Als die Argumente werden die Zeilen mit dem Hinweis des Algorithmus und des Providers übergeben. Zum Beispiel, für die Nutzung DSA (muss man Digital Signature Algorithm) und des Providers SUN schreiben:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance ("DSA", "SUN");

In Zusammenhang damit, was die Mehrheit kriptograficheskih der Algorithmen wahrscheinlich sind, man muss die wahrscheinliche Quelle — das Objekt der Klasse SecureRandom erstellen . Dabei existiert die Möglichkeit, verschiedene Methoden zum Beispiel SHA1PRNG (pseudo-random-number generation algorithm zu verwenden).

SecureRandom random = SecureRandom.getInstance ("SHA1PRNG", "SUN");

Jetzt ist es proinitsializirovat' das Objekt keyGen notwendig, ihm die 2 Parameter — die Länge in den Bits und die Quelle der Zufälligkeit übergeben .

keyGen.initialize (1024, random);

Die letzte Etappe ist eigentlich die Erzeugung Paares Schlüssel (die Methode generateKeyPair ()) und die Markierung zwei abgesonderter Schlüssel (die Methoden getPrivate () und getPublic ()).

KeyPair pair = keyGen.generateKeyPair ();

PrivateKey privKey = pair.getPrivate ();

PublicKey pubKey = pair.getPublic ();

Die Bildung der Unterschrift.

In erster Linie muss man das Objekt der Klasse Signature erstellen, die Methode getInstance (veranlassen):

Signature dsa = Signature.getInstance ("SHA1withDSA", "SUN");

In diesem Fall wird der Algorithmus DSA mit SHA1 (die hesh-Funktion) verwendet. Dann geht den Prozess der Initialisierung der Unterschrift vom Schlüssel. In dieser Etappe wird der geschlossene Schlüssel, der früher bekommen ist verwendet:

dsa.initSign (privKey);

Danach muss man die Unterschrift und die Daten zurückführen. Dazu meldet sich die Methode update (), das als der Parameter bekommene Bytedatenfeld, die unterschrieben sein sollen.

In der letzten Etappe wird die Unterschrift generiert, die in Form vom Bytemassiv vorgestellt wird.

byte [] realSig = dsa.sign ();

Die Sicherung der Unterschrift.

Nach dem Erhalten der Unterschrift und der Schlüssel muss man sie zum Beispiel in die Datei speichern, und, dem Ziel zusammen mit den Ursprungsdaten abzusenden. Es ist nötig zu betonen, dass der geschlossene Schlüssel nicht geschickt wird, und es bleibt dem Absender übrig. Es wird der offene Schlüssel abgesendet.

Also, der Absender schickt dem Empfänger zum Beispiel nach der E-Mail oder durch das gerade Netzverbinden die folgenden Dateien:

1.      Den offenen Schlüssel (public key)

2.      Die digitale Unterschrift (digital signature)

3.      Die Ursprungsdaten (das unterschriebene Dokument oder die Kennzahl).

Die Arbeit des Empfängers.

Die Abb. 6. Das Schema der Handlungen bei der Verifizierung der Unterschrift

Die Arbeit mit dem Schlüssel: die Lektüre aus der Datei und das Umwandeln in PrivateKey.

Der Empfänger verfügt über die Reihenfolge des Bytes, die den offenen Schlüssel vorstellen. Man muss das Bytemassiv (Byte [] encKey) zum Beispiel bekommen, diese Daten aus der Datei ins Massiv zu lesen, und dann, es ins Objekt der Klasse PublicKey umzuwandeln.

Dazu kann man die Klasse KeyFactory ausnutzen, die nach den Spezifikationen des Schlüssels das Objekt der Klasse Key (PrivateKey wieder herstellen kann und PublicKey sind die Nachkommen der Klasse Key). So muss man die sogenannte Spezifikation des Schlüssels bekommen. Sie kann man bekommen, darauf gegründet worden, welcher Standard bei der Erzeugung des Schlüssels verwendet wurde. In diesem Fall war der Schlüssel mit Hilfe des Providers "SUN" erzeugt, deshalb befriedigt er dem Standard X.509.

Die Erzeugung der Spezifikation des Schlüssels (es ist das Paket java.security.spec. * notwendig):

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec (encKey);

Die Bildung des Objektes der Klasse KeyFactory, die der digitalen Unterschrift und dem Provider "SUN" entsprechen.

KeyFactory keyFactory = KeyFactory.getInstance ("DSA", "SUN");

Das Erhalten des Objektes der Klasse PublicKey

PublicKey pubKey = keyFactory.generatePublic (pubKeySpec);

Die Arbeit mit der Unterschrift: die Lektüre aus der Datei und Signature.

Die Unterschrift muss man ins Bytemassiv (Byte [] sigToVerify) auch übersetzen. Dann man muss das Objekt als Signature erstellen, wie auch es wurde früher.

Signature sig = Signature.getInstance ("SHA1withDSA", "SUN");

sig.initVerify (pubKey);

Während der Lektüre muss man die Methode update verwenden () des Objektes sig, ist dem Fall der Bildung der Unterschrift ähnlich.

Die Echtheitsbestätigung (die Verifizierung).

Eine abschließende Etappe der Arbeit des Empfängers ist eigentlich das Erhalten der Antwort auf die Frage über Wahrhaftigkeit der Unterschrift und der Daten. Mit Hilfe der Methode verify () des Objektes der Klasse Signature kann man vom Ergebnis boolean bekommen:

boolean verifies = sig.verify (sigToVerify);

Der Wert wird true, wenn die vorliegende Unterschrift (sigToVerify) die gültige Unterschrift für die Daten, erstellt mit der Nutzung des offenen Schlüssels (pubKey).

Es ist nötig, dass die erste Etappe, die mit der Arbeit des Absenders verbunden ist zu bemerken, fordert einige Uhrzeit für die Erzeugung der für die Abfahrt notwendigen Daten. Für den Rechner der Klasse Intel Pentium III mit der Frequenz die 733 MHz bildet die Uhrzeit der Erzeugung ungefähr 10 Sekunden. Übrigens die Uhrzeit, die für die Verifizierung auf die Ordnung weniger verbraucht wird.

Außer betrachtet DSA, auch werden andere Mittel kriptograficheskoj der Sicherung, wie RSA, DES und andere gewährt. Ihre Nutzung gleich vorgestellt DSA.

Die Quellprogramme

Es sind die Texte der schon fertigen und arbeitenden Programme niedriger vorgestellt. GSig.java unterschreibt die Daten aus der Datei data, generiert den offenen Schlüssel und die Unterschrift, sie entsprechend in die Dateien signature und publickey speichernd. Und VSig.java liest die Daten aus den Dateien signature, publickey und data und führt auf den Bildschirm die Mitteilung von Wahrhaftigkeit der Unterschrift (über die Übereinstimmung die Unterschrift von der Angabe) heraus.

Es ist nötig zu bemerken, dass die erste Etappe (die Arbeit des Absenders) eine bestimmte Uhrzeit für die Erzeugung der für die Abfahrt notwendigen Daten fordert. Zum Beispiel, für den Rechner mit dem Prozessor Intel Pentium  bildet III 733 das MHz die Uhrzeit, die für die Erzeugung der 1024.-Bit-Schlüssel und der Unterschriften der kleinen Mitteilung gefordert wird, ungefähr 10 Sekunden. Übrigens bildet die Uhrzeit, die für die Verifizierung verbraucht wird, auf die Ordnung weniger weniger der Sekunde eben.

GSig.java

/* die Erzeugung DSA der Unterschrift */

import java.io. *;

import java.security. *;

class GSig

{

//die Sicherung des Bytemassives in die Datei

public static void saveToFile (byte [] info, String filename)

{

try

{

FileOutputStream fos = new FileOutputStream (filename);

fos.write (info);

fos.close ();

}

catch (Exception e)

{

System.err.println ("Caught exception" + e.toString ());

}

}//saveToFile ()

public static void main (String args [])

{

try

{

/* die Erzeugung der Schlüssel */

KeyPairGenerator keyGen = KeyPairGenerator.getInstance ("DSA", "SUN");

SecureRandom random = SecureRandom.getInstance ("SHA1PRNG", "SUN");

keyGen.initialize (1024, random);

KeyPair pair = keyGen.generateKeyPair ();

PrivateKey priv = pair.getPrivate ();

PublicKey pub = pair.getPublic ();

/* die Bildung des Objektes der Klasse Signature */

Signature dsa = Signature.getInstance ("SHA1withDSA", "SUN");

/* die Initialisierung vom privaten Schlüssel */

dsa.initSign (priv);

/* die Lektüre der Daten aus der Datei "data". Den Aufruf der Methode update () */

FileInputStream fis = new FileInputStream ("data");

BufferedInputStream bufin = new BufferedInputStream (fis);

byte [] buffer = new byte [1024];

int len;

while (bufin.available ()! = 0)

{

len = bufin.read (buffer);

dsa.update (buffer, 0, len);

}

bufin.close ();

/* die Erzeugung der Unterschrift */

byte [] realSig = dsa.sign ();

/* die Sicherung der Unterschrift in die Datei "signature" */

saveToFile (realSig, "signature");

/* die Sicherung des offenen Schlüssels in die Datei "pubkey" */

byte [] key = pub.getEncoded ();

saveToFile (key, "pubkey");

}

catch (Exception e)

{

System.err.println ("Caught exception" + e.toString ());

}

}//main ()

}//class GSig

VSig.java

/* die Verifizierung DSA der Unterschrift */

import java.io. *;

import java.security. *;

import java.security.spec. *;

class VSig

{

//die Lektüre aus der Datei ins Bytemassiv

public static byte [] readFromFile (String fileName)

{

byte [] info;

try

{

FileInputStream fis = new FileInputStream (fileName);

info = new byte [fis.available ()];

fis.read (info);

fis.close ();

}

catch (Exception e)

{

System.err.println ("Caught exception" + e.toString ());

info = new byte [0];

}

return (info);

}//copyFromFile ()

public static void main (String args [])

{

try

{

/* das Erhalten encoded public key aus der Datei "pubkey" */

byte [] encKey = readFromFile ("pubkey");

/* die Bildung der Spezifikation des Schlüssels */

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec (encKey);

.* Die Bildung der Objekte Lunafseshchkn und ЗгидшсЛун*.

KeyFactory keyFactory = KeyFactory.getInstance ("DSA", "SUN");

PublicKey pubKey = keyFactory.generatePublic (pubKeySpec);

/* die Lektüre der Unterschrift aus der Datei "signature" */

byte [] sigToVerify = readFromFile ("signature");

/* die Bildung des Objektes der Klasse Signature und die Initialisierung mit Hilfe des offenen Schlüssels */

Signature sig = Signature.getInstance ("SHA1withDSA", "SUN");

sig.initVerify (pubKey);

/* die Lektüre der Daten aus der Datei "data" und den Aufruf der Methode update () */

FileInputStream datafis = new FileInputStream ("data");

BufferedInputStream bufin = new BufferedInputStream (datafis);

byte [] buffer = new byte [1024];

int len;

while (bufin.available ()! = 0)

{

len = bufin.read (buffer);

sig.update (buffer, 0, len);

}

bufin.close ();

/* die Verifizierung */

boolean verifies = sig.verify (sigToVerify);

System.out.println ("Signature verifies:" + verifies);

}

catch (Exception e)

{

System.err.println ("Caught exception" + e.toString ());

}

}//main ()

}//class VSig

Die asymmetrische Kryptographie in Perl

Die ziemlich populäre Internet-gerichtete Sprache Perl hat die eingebauten Mittel der Versorgung der Sicherung auch.

Als Beispiel betrachten wir Nutzung kriptograficheskogo des Algorithmus der Chiffrierung RSA.

Den Algorithmus RSA

Die Aufgabe, die sich RSA entscheidet, ist die Sendung der geheimen Informationen so dass, ihren Smog nur das Ziel zu lesen.

Das Wesen der Methode besteht im Folgenden.

Vom potentiellen Empfänger der chiffrierten Mitteilung werden die folgenden Handlungen erfüllt:

·        werden zwei große einfachen Zahlen (zum Beispiel, 1024 Bit, 308 Zeichen) — p und q generiert  ;

·        wird ihr Werk n  pq berechnet  ;

·        kommt die Zufallszahl e heraus, das mit der Zahl (p‑1) (q‑1) gegenseitig einfach ist, sowie übertrifft es nicht;

·        wird die Größe d solche, dass ed  = 1 mod  (p‑1) (q‑1) berechnet    .

·         wird ein Paar (n, e) ein offener Schlüssel (public key), und d — den geschlossene Schlüssel (private key).

Der offene Schlüssel wird in den offenen Quellen zum Beispiel veröffentlicht wird durch die E-Mail übersendet.

Der Absender der chiffrierten Mitteilung für die Arbeit muss die folgenden Handlungen erfüllen:

·        den offenen Schlüssel zu bekommen;

·        die Mitteilung in der Zahlenart m, nicht übertreffend n zu erstellen;

·        die Größe c = (me) mod n zu berechnen    ;

·        mit gibt die chiffrierte Mitteilung eben, die sich dem Schöpfer des offenen Schlüssels begibt.

Der Empfänger der verschlüsselten Mitteilung rechnet m = (cd) mod n aus und bekommt die Mitteilung in der entzifferten Art.

Die Standhaftigkeit des Algorithmus RSA wird dank dem, was dem Übeltäter die Zahl d bekommen muss, die man ausrechnen kann, faktorizovav die Zahl n gewährleistet. Doch existieren zur Zeit die schnellen Algorithmen, lösend die Aufgabe der Faktorisierung der großen Zahlen nicht.

Die Hauptmethoden der Arbeit mit RSA

In der Sprache Perl wird die ganze Kryptographie durch die Bausteine CPAN geliefert. Die Realisierung RSA befindet sich im Paket Crypt:: RSA.

Die Erzeugung der 2048.-Bit-Schlüssel:

$rsa = new Crypt:: RSA;

$public, $private) = $rsa-> keygen (Size => 2048)

Der offene Schlüssel wird veröffentlicht.

Die Chiffrierung der Daten (die Zeile $message) mit der Nutzung des offenen Schlüssels:

my $c = $rsa-> encrypt (Message => $message, Key => $public);

Daraufhin wird die chiffrierte Mitteilung $c erhalten, das sich zurück dem Ziel begibt. Der Empfänger verwendet für das Entziffern früher als erzeugter geschlossene Schlüssel $private:

$message = $rsa-> decrypt (Ciphertext => $c, Key => $private);

Außer den vorgestellten Zeilen des Ausgangstextes auf der Sprache Perl, man braucht und einige zusätzliche Besonderheiten des Paketes zu bemerken.

Für die Abfahrt der geschützten Mitteilungen sollen die Informationen in Form von einer oder mehreren Zahlen vorgestellt sein, deren Werte n nicht übertreffen. Dabei entspricht jeder Mitteilung eine bestimmte Zahl und umgekehrt. Die Mittel der Sprache Perl lassen drobit' die Mitteilung auf die Reihenfolge solcher Zahlen, sowie im Folgenden zu, sie zurück in den Text zu verbinden.

Leider, im System RSA gibt eine wichtige Besonderheit, die die Stufe der Geborgenheit verringert. Wenn der Übeltäter des Absenders zwingen kann, die ihm schon bekannte Mitteilung zu verschlüsseln, so können die Größen p und q ohne Faktorisierung n berechnet sein. Doch kann man damit erfolgreich kämpfen, die Ausgangsmitteilung vom "Müll" (padding) überlastend. Rechtzeitig war für diese Operation der Standard PKCS #1 entwickelt. Crypt:: RSA realisiert nicht nur PKCS #1, sondern auch moderner OAEP, der padding standardmäßig verwendet. Unter Anwendung von PKCS #1 muss man den entsprechenden Parameter dem Konstrukteur übergeben.

$rsa = new Crypt:: RSA (ES => ' PKCS1v15)

Das Beispiel der Nutzung der digitalen Unterschrift

RSA

Die Echtheitsbestätigung und die Ganzheiten der Mitteilung entscheidet sich mit Hilfe DSA des Algorithmus gewöhnlich. Doch gibt die Möglichkeit, und das Paket Crypt:: RSA zu verwenden.

In erster Linie muss man die Schlüssel erzeugen. Öfter sind allen die Schlüssel schon fertig eben werden in der Datei unter dem Kennwort bewahrt. Für die Bildung $private wird der Konstrukteur Crypt:: RSA:: Key:: Private () verwendet, dem als die Parameter der Dateiname und das Kennwort übergeben wird.

$private = new Crypt:: RSA:: Key:: Private (

Filename => "keys/imja_fajla.private",

Password => ' das Kennwort '

);

Die Unterschrift verwirklicht sich mit der Hilfe $rsa-> sign (). Dabei tritt als die Parameter die Mitteilung und der geschlossene Schlüssel auf.

$rsa = new Crypt:: RSA;

$signature = $rsa-> sign (Message => $message, Key => $private);

Die Mitteilung $message und die Unterschrift $signature begeben sich dem Ziel, das, den offenen Schlüssel verwendend, bekommt die Bestätigung der Authentizität der Unterschrift:

$public = new Crypt:: RSA:: Key:: Public ( 
                            Filename => "keys/imja_fajla.public",); 
$rsa-> verify (Message => $message, 
              Signature => $signature, 
              Key => $public) 
             || die "die Unterschrift gefälscht! \n";

DSA

DSA wird im Paket Crypt:: DSA realisiert. Die Nutzung DSA ist der RSA-Unterschrift ähnlich, aber es gibt auch die Besonderheiten.

Snachalo wird der DSA-Schlüssel generiert:

use Crypt:: DSA;
$dsa = Crypt:: DSA-> new;
$key = $dsa-> keygen (Size => 512);

Die Unterschrift verwirklicht sich in der standardmäßigen Weise:

$sig = $dsa-> sign (Message => $message, Key => $key);

Dem Empfänger werden die Mitteilung, die Unterschrift und den offenen Schlüssel wieder geschickt. Im Prozess die Verifizierung (es wird der offene Schlüssel $pub_key) die Unterschrift verwendet entweder fängt ($valid=true an), oder wird ($valid=false) abgelehnt.

$valid = $dsa-> verify (Signature => $sig, 
                               $message, 
                               Key => $pub_key);

Zum Schluss muss man betonen, dass die realisierten Algorithmen kriptograficheskoj der Sicherung in den Paketen für die Sprache Perl in den Internet-ausgerichteten Projekten breit verwendet werden können.

Doch braucht man zu bemerken, dass sich die Programmierer mit dem Problem der großen Zahl allerlei Interfaces in verschiedenen Sprachen nicht selten treffen. In diesem Zusammenhang ist das Bedürfnis nach den universellen Interfaces erschienen.

Universell kriptograficheskie die Interfaces

Viele Firmen, einschließlich die größten Systemintegratoren, kriptograficheskuju die Sicherung in den angewandten Systemen verwendend, sind gegangen nach den Pfaden der Realisierung der universellen Interfaces. Zu ihren Aufgaben gehört die Überlassung der Anwendung des breiten Satzes der Möglichkeiten nach dem Aufruf eines bestimmten Satzes kriptograficheskih der Services. Solches Herangehen vergrössert die Flexibilität des Systems und gewährleistet die Unabhängigkeit von den Besonderheiten der Realisierung der Algorithmen. Außerdem verringert die Wahrscheinlichkeit des Erscheinens der Fehler, die die Stufe der Geborgenheit verringern.

Ursprünglich entstanden viele Interfaces als die innenkorporativen Standards. So sind CryptoAPI (Microsoft), Cryptoki (RSA Data Security), GCS-API (X/Open) erschienen. Die internationale Organisation hat nach versucht die Standardisierung IETF, (Internet Engineering Task Force) den einheitlichen universellen Standard zu erstellen, der GSS-API genannt war. CpyptoAPI ist auf die Nutzung in die Wespen Windows NT ausgerichtet, während die Übrigen die deutlichen Beschränkungen nicht haben, aber doch werden in die Wespen Unix öfter verwendet.

In Ergänzung zu obenernannt ist nötig es zu bemerken, dass die Hersteller der Software dem gewöhnlich nicht nachdenken, welche Algorithmen kriptograficheskoj der Sicherung in ihrem Produkt verwendet werden werden. Es wird nur das notwendige Interface des Aufrufs der Funktionen der Sicherung, die vom aussenstehenden Produzenten entwickelt sind gewährleistet.

Microsoft CryptoAPI

Die Ordnung der Wechselwirkung der Anwendungen mit kriptograficheskimi von den Bausteinen des Betriebssystemes reglementiert das Dokument, das Microsoft Cryptographic Application Programming Interface heißt (MS CryptoAPI). Die Funktionen, die darin beschrieben sind, werden Windows 9x und Windows NT/2000/XP unterstützt  . In die letzten Wespen der Funktion CryptoAPI sind in den Bausteinen crypt32.dll und advapi32.dll enthalten. In Wirklichkeit realisieren diese Bausteine kriptograficheskie die Algorithmen nicht, und wenden sich an andere Bausteine, die Cryptographic Service Providers (CSP) genannt werden. Gleichzeitig kann man im Betriebssystem etwas CSP feststellen. Bei der ersten Behandlung zu CryptoAPI wählt das Anwendungsprogramm aus, mit welchem Baustein CSP sie je danach, welche kriptograficheskie die Algorithmen ihr notwendig sind (die Abb. 7 arbeiten wird ). Folgt, dass das System, das in Java verwendet wird zu bemerken, nach den Organisationen ist der Gegebenen ähnlich.

Die Abb. 7. Das Schema der Architektur CryptoAPI

CryptoAPI lässt zu, gegeben zu chiffrieren, die Dokumente von der digitalen Unterschrift und anderes zu unterschreiben. Es existieren die eingebauten Mittel zum Beispiel Microsoft Base Cryptographic Provider.

So gibt die Möglichkeit, CryptoAPI in solchen Programmen der Entwicklung, wie Visual Studio zu verwenden. Das heißt verwirklicht sich die Unterstützung solcher Sprachen, wie Visual C ++, Visual Basic, Visual FoxPro und andere automatisch.

Mit der Entwicklung von der Gesellschaft Microsoft des sprachlichen Bahnsteigs.NET, die Mehrheit der Programmiersprachen, einschließlich die Sprache die Popularität tippende C #, unterstützen kriptograficheskie die Methoden der Sicherung.

Ein Beispiel der Funktion der Erzeugung der Schlüssel kann CryptGenKey () sein. Für die Chiffrierung und die Entzifferung sind Funktionen CryptEncrypt () und CryptDecrypt () und so weiter.

Die Nutzung kriptozashchity in anderen Sprachen

Wenn es in der Sprache keine eingebaute Mittel kriptograficheskoj der Sicherung gibt, so existiert zwei Möglichkeiten.

Erstens, man kann versuchen, allen “von der Null zu machen”. Leider, öfter wird dieser möglich nicht gewährt, da mit der Realisierung der verhältnismäßig komplizierten Algorithmen verbunden ist.

Die zweite Weise ist eine Nutzung der Objektbausteine, die mit der Nutzung der Compilers von verschiedenen Programmiersprachen erstellt sind.

Wir werden zulassen, es gibt die Reihe der Sprachen, auf die die geforderten Algorithmen schon realisiert sind. Mit den Compilers von diesen Sprachen wird das Erhalten der Objektcodes gewährleistet, die man bei der Entwicklung der Anwendung auf anderer Sprache verwenden kann. Natürlich, es ist realizuemo nicht immer leicht. Doch solche Sprachen, wie zum Beispiel das ALGOL, das Fortran, PL1 dank der ähnlichen Syntax der sprachlichen Konstruktionen und der Realisierung der Compilers im gegebenen Sinn in der Regel vollkommen vereinbar sind.

Das Beispiel der Arbeit ist auf der Abb. 8 vorgestellt.

Die Abb. 8. Das Beispiel des Schemas der Vereinigung der Bausteine, die auf verschiedenen Sprachen erstellt sind.

Eine Möglichkeit der Anwendung der angegebenen Weise betrachtend, muss man bemerken, dass es im Falle der großen Schwierigkeiten stykovki der Bausteine, die auf verschiedenen Programmiersprachen in der Regel erstellt sind die Möglichkeit der Nutzung für dieses Ziel des Assemblers gibt. Dabei können die entsprechenden Strukturen des Assemblers wie für die Zwischensendung der Parameter, als auch für die Verwirklichung des Aufrufs der Objektbausteine verwendet werden.

Den Schluss

Zum Abschluss der gegebenen Übersicht kann man noch einmal betonen, dass jede beschriebene Weise der Realisierung kriptograficheskih der Sicherungsmittel der Informationen wie von den Vorzügen, als auch den Mängeln verfügt. Die Auswahl klärt sich von den gestellten Aufgaben unter Berücksichtigung der Besonderheiten der Realisierung, der Ausbeutung und der Finanzmöglichkeiten. Dabei muss man die verwendete Hardware, die notwendige Stufe der Sicherung der Informationen usw. berücksichtigen

In Ergänzung dazu ist nötig es noch einmal, dass zu bemerken, wie die Praxis vorführt, kriptograficheskie gewährleisten die Methoden der Sicherung die Sicherheit auf dem verhältnismäßig hohen Niveau wirklich. Gewiß, die gegebene Richtung wird sich mit dem Erscheinen der neuen Kommunikations-Hard-Und-Softwaremittel schnell entwickeln. Die Mehrheit der modernen Gesellschaften bemühen sich, universell kriptograficheskie die Interfaces zu entwickeln und, den Hersteller der Software vor den selbständigen Realisierungen der komplizierten Algorithmen zu beschützen. Sowohl JDK security API als auch CryptoAPI, und gewähren die eingebauten Mittel.NET den reichen Satz der Mittel der Chiffrierung, zulassend, das eigene System des Datenschutzes zu organisieren. Doch muss man bemerken, dass auf die Pfade der Realisierung der wirksamen Sicherung der Informationen noch viele technologische Schwierigkeiten existieren. Nichtsdestoweniger, die entsprechenden Hard-Und-Softwaremittel entwickeln sich ungestüm. Es lässt zu, auf das Erscheinen der neuen Lösungen zu beabsichtigen, die man, hoffen kann, werden die existierenden bis jetzt Defekte entzogen sein.

Die Literatur

1.          “Das Tutorial in die Kryptographie” / Unter obshch. Den Redakteur des Jh. des Jh. JAshchenko. — m.:МЦНМО, "CHeRo", 1998. — 272c.

2.          A.Nikitin, “Universell kriptograficheskie die Interfaces”, die Sicherung der Informationen, Konfident, N5, 1997.

3.          M.Mogran, “Java 2. Die Führung des Herstellers”, die Gasse mit angl.: Uch. Die Siedlung — M: "Williams", 2000. — 720c.: den Schlamm.

4.          Vipul Ved Prakash, Benjamin Trott, “Asymmetric Cryptography in Perl”, O'Reilly, 2001.

5.          R.Coleridge, “The Cryptography API, or How to Keep a Secret”, MSDN, 1996.

6.          D.Esposito, “Supporting CryptoAPI in Real-World Applications”, MSDN, 1997.

7.          http://java.sun.com

8.          S.K.Parmar, “An introduction to security”, Fred Cohen &Associates, 2000.

9.          R.L/Rivest, A.Shamir and L.Adleman, “A method for obtaining digital signatures and public key cryptosystems”. Commun. ACM, vol.21, p. 120-126, 1978.

10.       W.Diffie and M.E.Hellman, “New directions in cryptograpgy”, IEEE Trans. Inf. Theory, vol. EDV-22, N6, p.644-654, Nov. 1976.

11.       A.Menezes, P.van Oorschot, S.Vanstone, “Handbook of applied cryptography”, CRC Press, 1996.


Der Artikel ist in der Zeitschrift den Rechner die Presse (http://www.compress.ru/) veröffentlicht.

   About Us | Site Map | Privacy Policy | Contact Us | © 2009 By Rudometov.COM