Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

CRYPT - Wörter verschlüsseln

&pagelevel(3)&pagelevel

Allgemeines

Anwendungsgebiet:

Verschlüsselung von Wörtern; siehe "Verschlüsselung"

Makrotyp:

S-Typ, MF-Format 3: D-/C-/M-/E-/L-Form;
siehe "S-Typ-Makroaufrufe"


Makrobeschreibung

Der Makro CRYPT dient der Einweg-Verschlüsselung von Wörtern mit einer maximalen Länge von 8 Byte. Einweg-Verschlüsselung heißt, dass eine Entschlüsselung der mit CRYPT verschlüsselten Wörter nicht möglich ist. Im Ergebnis der Makroausführung wird eine 4 Byte oder 8 Byte lange Zeichenkette zurückgeliefert.

Makroaufrufformat und Operandenbeschreibung

CRYPT

INSTRA=<var: pointer> / (<reg: pointer>)

,INSTRL=4 / 8 / <var: int:1>

,OUSTRA=<var: pointer> / (<reg: pointer>)

,CRYALG=*SCA / *SCAVK / *OLD / <var: enum-of _ecrt_s:1>

,CRCL2OP=*YES / *NO / <var: enum-of _cl2op_s:1>

,VKEYA=<var: pointer> / (<reg: pointer>)

,XPAND=*INPAR / *KEYPAR

,MF=D / C / M / E / L

[,PARAM = adr / (r)]

,PREFIX=S / p

,MACID=RME / macid

In der nachfolgenden Operandenbeschreibung sind die Operanden alphabetisch geordnet.

CRCL2OP=
verschlüsselt das Eingabewort in Abhängigkeit vom Systemparameter ENCRYPT.

*YES
Es wird abhängig vom Systemparameter ENCRYPT verschlüsselt.

*NO
Es wird immer verschlüsselt, also unabhängig vom Systemparameter ENCRYPT.

<var: enum-of _cl2op_s:1>
Name des Feldes mit der Art der Verschlüsselung.

CRYALG=
wählt den Verschlüsselungsalgorithmus aus.

*SCA
Es wird der Verschlüsselungsalgorithmus SCA verwendet.

*SCAVK
Es wird der Verschlüsselungsalgorithmus SCA und der im Schlüsselfeld (Operand VKEYA) angegebene Schlüssel verwendet.

*OLD
Der bisher verwendete Verschlüsselungsalgorithmus wird verwendet.

<var: enum-of _ecrt_s:1>
Name des Feldes mit dem Verschlüsselungsalgorithmus.

INSTRA=
bestimmt die Adresse eines Feldes, dass das zu verschlüsselnde Wort (Eingabewort) enthält. Die Länge des Feldes wird mit dem Operanden INSTRL angegeben. Das Eingabewort muss eine Zeichenkette vom Typ X-String oder C-String mit maximal 8 Zeichen sein.
Die Angabe dieses Operanden ist Pflicht bei MF=L.

<var: pointer>
Name des Feldes mit der Adresse des Eingabewortes; nur in Verbindung mit MF=M zulässig.

(<reg: pointer>)
Register mit der Adresse des Eingabewortes; nur in Verbindung mit MF=M zulässig.

INSTRL=
gibt die Länge des Feldes an, das für das zu verschlüsselnde Eingabewort reserviert werden muss. Die Länge darf den Wert 8 nicht übersteigen. Das Feld, in dem das Eingabewort spezifiziert ist, darf nur entweder 4 Byte oder 8 Byte lang sein.

4
Es werden 4 Byte für die Feldlänge reserviert.

8
Es werden 8 Byte für das Feld reserviert.

<var: int:1>
Name des Feldes mit der Angabe der zu reservierenden Feldlänge.

MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. PREFIX, MACID und PARAM) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Bei der C-Form oder D-Form des Makroaufrufs kann ein Präfix PREFIX und bei der C-Form zusätzlich eine Macid MACID angegeben werden (siehe Abschnitt „S-Typ-Makroaufrufe“).

OUSTRA=
bestimmt die Adresse eines Feldes, dass das verschlüsselte Wort (Ausgabewort) enthalten soll. Zurückgeliefert wird ein 4 Byte langes Ausgabewort, wenn das Eingabewort <= 4 Byte ist. Beträgt die Länge des Eingabewortes zwischen 5 Byte und 8 Byte, wird ein 8 Byte langes Ausgabewort zurückgeliefert.
Die Angabe dieses Operanden ist Pflicht bei MF=L.

<var: pointer>
Name des Feldes mit der Adresse des Ausgabewortes; nur in Verbindung mit MF=M zulässig.

(<reg: pointer>)
Register mit der Adresse des Ausgabewortes; nur in Verbindung mit MF=M zulässig.

VKEYA=
Adresse des verwendeten variablen Schlüssels, der bei der Verschlüsselungseinstellung CRYALG=*SCAVK verwendet werden soll.

<var: pointer>
Name des Feldes mit der Adresse des variablen Schlüssels; nur in Verbindung mit MF=M zulässig.

(<reg: pointer>)
Register mit der Adresse des variablen Schlüssels; nur in Verbindung mit MF=M zulässig.

XPAND=
steuert die Makroauflösung.

*INPAR
Es wird die Parameterstruktur expandiert.

*KEYPAR
Es wird nur der Datenbereich für den variablen Schlüssel expandiert.

Auswahl des variablen Schlüssels

Die Verwendung eines variablen Schlüssels ist nur bei einer Verschlüsselung mit dem SCA-Algorithmus (Operand CRYALG=*SCA) möglich. Der variable Schlüssel ist 44 Byte lang und besteht aus folgenden vier Teilen (PREFIX und MACID sind jeweils mit ihren Voreinstellungen belegt):

SRMEVK

DS

0F


SRMECC

DS

F

Iterationsanzahl

SRMEKEE1

DS

XL16

Schlüsselkomponente EE1

SRMEKEE2

DS

XL16

Schlüsselkomponente EE2

SRMEKEE3

DS

XL8

Schlüsselkomponente EE3

SRMEVK#

EQU

*-SRMEVK


Die Verschlüsselung mit dem SCA-Algorithmus beruht auf der iterativen Anwendung einer Basisverschlüsselung. Um eine genügend große Sicherheit zu bieten, muss die Anzahl der Iterationen (Feld SRMECC) 128 bis 8192 betragen. Eine Verschlüsselung mit der Iterationsanzahl 128 benötigt ca. 15000 Operationen. Die Anzahl der Operationen steigt linear mit der Anzahl der Iterationen.

Die Schlüsselkomponenten EE1 und EE2 (Felder SRMEKEE1 und SRMEKEE2) repräsentieren Permutationen der Zahlen 0 bis 15. Für einen sog. „sicheren“ Schlüssel muss jedes Byte von EE1 und EE2 eine Zahl von 0 bis 15 enthalten, und zwar so, dass jede dieser Zahlen jeweils einmal in EE1 bzw. EE2 vorkommt.
Die Schlüsselkomponente EE3 (Feld SRMEKEE3) enthält beliebige Zeichen in der Länge 8 Byte. Es dürfen jedoch keine 2 gleichen Byte enthalten sein.

Die Verschlüsselungsroutine prüft die o.g. Bedingungen für einen „sicheren“ variablen Schlüssel nicht ab. Bei Einweg-Verschlüsselungsverfahren ist die Verwendung von „schwachen“ Schlüsseln oft nicht zu vermeiden. Der SCA-Verschlüsselungsalgorithmus ist daher auch mit „schwachen“ Schlüsseln ablauffähig. Aus Sicherheitsgründen sollte die Verwendung von „schwachen“ Schlüsseln vermieden werden.

Verschlüsselung von Eingabeworten einer Länge > 8 Byte

Ist eine Verschlüsselung von Worten mit einer Länge > 8 Byte nötig, kann das Eingabewort in 8-Byte-Worte zerlegt und die Wortsegmente separat verschlüsselt werden. Die Verschlüsselung von Wörtern mit einer Länge > 8 Byte ist mit den vom Makro CRYPT angebotenen Algorithmen nicht sicherer, als die Verschlüsselung eines Wortes mit einer Länge <= 8 Byte.

Layout der DSECT

Das Layout der DSECT finden Sie in "CRYPT - Wörter verschlüsseln".

Rückinformation und Fehleranzeigen

Standardheader:

+---------------+
|   |   |   |   |
|c|c|b|b|a|a|a|a|
+---------------+

Über die Ausführung des Makros CRYPT wird im Standardheader folgender Returncode übergeben (cc=Subcode2, bb=Subcode1, aaaa=Maincode):

X'cc'

X'bb'

X'aaaa'

Erläuterung

X'00'

X'00'

X'0000'

Funktion erfolgreich ausgeführt.

X'01'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Keine Zuweisung des Eingabewortes.

X'02'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Keine Zuweisung des Ausgabewortes.

X'03'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Keine Zuweisung für den variablen Schlüssel.

X'04'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Unzulässige Angabe für den Verschlüsselungsalgorithmus.

X'05'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Unzulässige Angabe zur Abhängigkeit vom Systemparameter.

X'06'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Unzulässige Längenangabe für das Eingabewort.

X'08'

X'01'

X'0001'

Funktion wegen Operandenfehler nicht ausgeführt:
Unzulässiger variabler Schlüssel.

X'09'

X'01'

X'0002'

Funktion nicht ausgeführt wegen Fehler bei der Speicherbereichsanforderung:
Kein Zugriff auf das Feld mit dem Eingabewort möglich.

X'0A'

X'01'

X'0002'

Funktion nicht ausgeführt wegen Fehler bei der Speicherbereichsanforderung:
Kein Zugriff auf das Feld mit dem Ausgabewort möglich.

X'0B'

X'01'

X'0002'

Funktion nicht ausgeführt wegen Fehler bei der Speicherbereichsanforderung:
Kein Zugriff auf das Feld mit dem variablen Schlüssel möglich.

X'0C'

X'01'

X'0002'

Funktion nicht ausgeführt wegen Fehler bei der Speicherbereichsanforderung:
Kein Zugriff auf den Datenbereich möglich.

X'0D'

X'01'

X'0002'

Funktion nicht ausgeführt wegen Fehler bei der Speicherbereichsanforderung:
Kein Zugriff auf das Feld SRMEPOE möglich.


X'20'

X'0003'

Funktion nicht ausgeführt: Interner Fehler.

Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle „Standard-Returncodes“ (Standardheader) entnommen werden.

Beispiel

PRINT NOGEN
   CRYPT    START
            BALR  10,0
            USING *,10
            CRYPT MF=E,PARAM=PARLIST -------------------------------------(1)
 1          MFCHK MF=E,PREFIX=S,MACID=RME,PARAM=PARLIST,
 1                SVC=16,
 1                DMACID=RME,SUPPORT=(D,L,C,M,E)
 2          LA    1,PARLIST
 2          SVC   16
            CLI   SRMEMR1,SRMEOK      * Error query
            BNE   ERREXIT
            UNPK  OUTPUTX(9),OUTPUT(5)
            UNPK  OUTPUTX+8(9),OUTPUT+4(5)
            TR    OUTPUTX,CODETAB-C'0'
            WROUT CODE,0              * Output
            TERM
   *
   ERREXIT  WROUT TEXT,0
            TERM
   ****
   CODE     DC    Y(CODEEND-CODE)
            DS    CL3
            DC    C'OUTPUT OF THE ENCRYPTED WORD '
   INPUT    DC    C'SUPERMAN'         * Input word *
            DC    C': '
   OUTPUT   DS    CL8                 * Output word
            DC    C'  '
   OUTPUTX  DS    CL16                * Output word hex
   CODEEND  EQU   *
            DS    C
   TEXT     DC    Y(TEXTEND-TEXT)
            DS    CL3
            DC    C'ERROR !!'
   TEXTEND  EQU   *
   KEY      DS    0F
            DC    F'250'              * Number of iterations
            DC    X'0203040506070809' * EE1
            DC    X'0A0B0C0D0E0F0001'   EE1 *
            DC    X'0100030205040706' * EE2
            DC    X'09080B0A0D0C0F0E'   EE2 *
            DC    X'A1A2A3A4A5A6A7A8' * EE3 *
   PARLIST  CRYPT MF=L,INSTRL=8,CRYALG=*SCAVK,CRCL2OP=*NO, 2
                  VKEYA=KEY,INSTRA=INPUT,OUSTRA=OUTPUT -------------------(1)
            ORG   PARLIST
            CRYPT MF=C ---------------------------------------------------(2)
1 *
1 SRMEPA     DS    0F          BEGIN of PARAMETERAREA
1         FHDR  MF=(C,SRME),EQUATES=NO                    STANDARD HEADER
2          DS    0A
2 SRMEFHE  DS    0XL8            0   GENERAL PARAMETER AREA HEADER
2 *
2 SRMEIFID DS    0A              0   INTERFACE IDENTIFIER
2 SRMEFCTU DS    AL2             0   FUNCTION UNIT NUMBER
2 *                                  BIT 15    HEADER FLAG BIT,
2 *                                  MUST BE RESET UNTIL FURTHER NOTICE
2 *                                  BIT 14-12 UNUSED, MUST BE RESET
2 *                                  BIT 11-0  REAL FUNCTION UNIT NUMBER
2 SRMEFCT  DS    AL1             2   FUNCTION NUMBER
2 SRMEFCTV DS    AL1             3   FUNCTION INTERFACE VERSION NUMBER
2 *
2 SRMERET  DS    0A              4   GENERAL RETURN CODE
2 SRMESRET DS    0AL2            4   SUB RETURN CODE
2 SRMESR2  DS    AL1             4   SUB RETURN CODE 2
2 SRMESR1  DS    AL1             5   SUB RETURN CODE 1
2 SRMEMRET DS    0AL2            6   MAIN RETURN CODE
2 SRMEMR2  DS    AL1             6   MAIN RETURN CODE 2
2 SRMEMR1  DS    AL1             7   MAIN RETURN CODE 1
2 SRMEFHL  EQU   8               8   GENERAL OPERAND LIST HEADER LENGTH
2 *
1 *       RETURN CODE EQUATES FOR MAIN-CODE 1
1 SRMEOK  EQU   X'00'               NOERROR
1 SRMEIOP EQU   X'01'               INVALID OPERAND
1 SRMEIAR EQU   X'02'               INVALID AREA
1 SRMEINE EQU   X'03'               INTERNAL ERROR
1 *
1 SRMEIN  DS    F                   INPUT STRING ADDRESS
1 SRMEOUT DS    F                   OUTPUT STRING ADDRESS
1 SRMELEN DS    X                   INPUT STRING LENGTH
1 SRMEECR DS    X                   SELECT ENCRYPTION ROUTINE
1 *
1 *       EQUATES FOR ENCRYPTION ROUTINE SELECT
1 SRMEECRS EQU   X'01'               SCA ENCRYPTION ROUTINE
1 SRMEECRO EQU   X'02'               OLD ENCRYPTION ROUTINE
1 SRMEECRV EQU   X'03'               SCA ENCR. ROUT. (V. KEY)
1 *
1 SRMEC2O DS    X                   SEL. CLASS 2 OPTION YES/NO
1 *       EQUATES FOR CLASS 2 OPTION
1 SRMEC2OY EQU   X'01'               CLASS 2 OPTION YES
1 SRMEC2ON EQU   X'02'               CLASS 2 OPTION NO
1 *
1 SRMEPOE DS    X                   PROGRESS OF EXECUTION
1 *       RETURN FOR PROGRESS OF EXECUTION
1 SRMEUV  EQU   X'01'               UNCRYPTED
1 SRMESCA EQU   X'02'               SCA ENCRYPTED
1 SRMEOLD EQU   X'03'               OLD ENCRYPTED
1 SRMESVK EQU   X'04'               SCA ENCRYPTED (V. KEY)
1 *
1 SRMESVK@ DS    F                   ADR. VARIABLE KEY
1 SRME#   EQU   *-SRMEPA    LENGTH OF PARAMETERAREA
  *
  CODETAB  DC    C'0123456789ABCDEF'
           END   CRYPT

Ablaufprotokoll:

/start-assembh
%  BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED
%  ASS6010 <ver> OF BS2000 ASSEMBH  READY 
%//compile source=*library-element(lib.srpmencp,crypt), -
%//        compiler-action=module-generation(module-format=llm), -
%//        module-library=lib.srpmencp, -
%//        listing=parameters(output=*library-element(lib.srpmencp,crypt))
%  ASS6011 ASSEMBLY TIME: 360 MSEC
%  ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES
%  ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS
%  ASS6006 LISTING GENERATOR TIME: 65 MSEC
%//end
%  ASS6012 END OF ASSEMBH
/start-executable-program library=lib.srpmencp,element-or-symbol=crypt
%  BLS0523 ELEMENT 'CRYPT', VERSION '@', TYPE 'L' FROM LIBRARY
   ':2OSC:$EVA.LIB .SRPMENCP' IN PROCESS
%  BLS0524 LLM 'CRYPT', VERSION ' ' OF '<date> <time>' LOADED
OUTPUT OF THE ENCRYPTED WORD SUPERMAN: |ÑzÄkè~]  4F69A9639254FFBD --------(3)

(1)

Ein Wort der Länge 8 Bytes soll mit dem SCA-Algorithmus unabhängig vom Systemparameter mit dem Makro CRYPT verschlüsselt werden. Es soll ein variabler Schlüssel verwendet werden. Das Eingabewort wird aus dem Feld INPUT eingelesen, das Ausgabewort im Feld OUTPUT abgelegt.

(2)

Layout der Parameterliste.

(3)

Ausgabe des Feldes CODE durch den Makro WROUT. Das Eingabewort SUPERMAN wird verschlüsselt zu |ÑzÄkè~]. Hexadezimal ausgedrückt lautet das Verschlüsselungsergebnis 4F69A9639254FFBD.