@portll/cobolwork 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -9
- package/bin/cobolwork.mjs +7 -1
- package/lib/bms.mjs +8 -0
- package/lib/capabilities.mjs +2 -2
- package/lib/cics-commands.mjs +308 -42
- package/lib/consequence.mjs +19 -0
- package/lib/constants.mjs +60 -0
- package/lib/control.mjs +61 -17
- package/lib/csd.mjs +6 -1
- package/lib/dataflow.mjs +107 -27
- package/lib/explain.mjs +31 -5
- package/lib/exploitability.mjs +49 -4
- package/lib/gate.mjs +31 -9
- package/lib/hlasm.mjs +79 -0
- package/lib/kernel/findings.mjs +2 -0
- package/lib/kernel/registry.mjs +6 -0
- package/lib/kernel/source-tree.mjs +1 -0
- package/lib/options.mjs +6 -2
- package/lib/packs.mjs +4 -0
- package/lib/parser.mjs +67 -12
- package/lib/precompile-cics.mjs +9 -3
- package/lib/precompile.mjs +3 -2
- package/lib/revision.json +1 -1
- package/lib/sarif.mjs +3 -2
- package/lib/scan.mjs +2 -1
- package/lib/sets/abend.mjs +186 -0
- package/lib/sets/compile.mjs +2 -1
- package/lib/sets/crypto.mjs +110 -0
- package/lib/sets/flow.mjs +18 -0
- package/lib/sets/hidden.mjs +1 -1
- package/lib/sets/hlasm.mjs +121 -0
- package/lib/sets/jcl.mjs +16 -1
- package/lib/sets/recon.mjs +1 -0
- package/lib/sets/web.mjs +99 -4
- package/lib/sources.mjs +12 -2
- package/lib/utilities.mjs +2 -0
- package/lib/verify.mjs +2 -1
- package/lib/words.mjs +377 -17
- package/package.json +1 -1
- package/rules/compliance-cobit2019.json +180 -0
- package/rules/compliance-dora.json +195 -0
- package/rules/compliance-ffiec.json +195 -0
- package/rules/compliance-nist80053.json +195 -0
- package/rules/gitleaks-mainframe.toml +24 -10
- package/rules/hlasm-operations.json +451 -0
- package/rules/icsf-services.json +1178 -0
|
@@ -0,0 +1,1178 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "ICSF callable services as COBOL calls them: each service's parameters in CALL ... USING order, its keywords in this project's words, and the IBM topic each was read from on the retrieved date. lib/sets/crypto.mjs reads the findings section, whose keywords are the ones each rule reports, with the reason each is weak.",
|
|
3
|
+
"retrieved": "2026-10-02",
|
|
4
|
+
"document": {
|
|
5
|
+
"title": "z/OS Cryptographic Services ICSF Application Programmer's Guide",
|
|
6
|
+
"number": "SC14-7508-60",
|
|
7
|
+
"edition": "June 2025, z/OS 3.1 (Cryptographic Support for z/OS 3.1, FMID HCR77E0)",
|
|
8
|
+
"product": "SSLTBW_3.1.0",
|
|
9
|
+
"library_url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=zos-cryptographic-services",
|
|
10
|
+
"pdf_url": "https://www.ibm.com/docs/en/SSLTBW_3.1.0/pdf/csfb400_icsf_apg_hcr77e0.pdf",
|
|
11
|
+
"content_api": "https://www.ibm.com/docs/api/v1/content/SSLTBW_3.1.0/com.ibm.zos.v3r1.csfb400/<page>.htm",
|
|
12
|
+
"not_consulted": "A z/OS 3.2 edition exists (SSLTBW_3.2.0); it was not read."
|
|
13
|
+
},
|
|
14
|
+
"conventions": {
|
|
15
|
+
"positions": "1-based positions in the COBOL CALL ... USING list; return_code is 1.",
|
|
16
|
+
"keywords": "Keywords are 8-byte fields, left-justified and blank-padded, unless noted. rule_array is contiguous 8-byte slots; rule_array_count says how many are filled.",
|
|
17
|
+
"weak_basis": "'ibm' marks a weakness IBM itself states (key size in bits, compliance-mode exclusion, 'strongly discouraged'). 'judgement' marks the analyser's own classification of an algorithm IBM documents neutrally.",
|
|
18
|
+
"sources": [
|
|
19
|
+
{
|
|
20
|
+
"title": "Callable service syntax",
|
|
21
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=icsf-callable-service-syntax",
|
|
22
|
+
"fact": "COBOL form is CALL 'CSNBxxxx' USING return_code, reason_code, exit_data_length, exit_data, parameter_5 ... in the documented order; CSFxxxx names can be used in place of CSNBxxx."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"title": "Callable services with ALET parameters",
|
|
26
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=syntax-callable-services-alet-parameters",
|
|
27
|
+
"fact": "CSNBxxx1 entry points take extra ALET parameters for data-space data; 64-bit ALET forms are CSNExxx1."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"title": "Resource names for CCA and ICSF entry points",
|
|
31
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=zcsiapg-resource-names-cca-icsf-entry-points",
|
|
32
|
+
"fact": "Maps each CCA name (CSNB/CSNE) to ICSF names (CSF..., CSF...6 for 64-bit)."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"title": "COBOL",
|
|
36
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=examples-cobol",
|
|
37
|
+
"fact": "IBM's COBOL sample calls CSNBKGN with key_form 'OP', key_length 'SINGLE', key_type_1 'DATA', then CSNBENC/CSNBDEC with rule 'CUSP' and an ICV of LOW-VALUES."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"title": "Impact of compliance mode on callable services",
|
|
41
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=guide-impact-compliance-mode-callable-services",
|
|
42
|
+
"fact": "Under PCI-HSM 2016 compliance mode, single-length DES keys cannot be compliant-tagged; default DATA key tokens cannot be compliant-tagged; compliant-tagged keys cannot use the SHA-1 hash method (stated for RSA keys and certificates)."
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"services": [
|
|
47
|
+
{
|
|
48
|
+
"name": "CSNBKGN",
|
|
49
|
+
"title": "Key Generate (CSNBKGN and CSNEKGN)",
|
|
50
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=keys-key-generate-csnbkgn-csnekgn",
|
|
51
|
+
"entry_points": {
|
|
52
|
+
"31-bit": [
|
|
53
|
+
"CSNBKGN",
|
|
54
|
+
"CSFKGN"
|
|
55
|
+
],
|
|
56
|
+
"64-bit": [
|
|
57
|
+
"CSNEKGN",
|
|
58
|
+
"CSFKGN6"
|
|
59
|
+
],
|
|
60
|
+
"alet": null
|
|
61
|
+
},
|
|
62
|
+
"parameters": [
|
|
63
|
+
"return_code",
|
|
64
|
+
"reason_code",
|
|
65
|
+
"exit_data_length",
|
|
66
|
+
"exit_data",
|
|
67
|
+
"key_form",
|
|
68
|
+
"key_length",
|
|
69
|
+
"key_type_1",
|
|
70
|
+
"key_type_2",
|
|
71
|
+
"KEK_key_identifier_1",
|
|
72
|
+
"KEK_key_identifier_2",
|
|
73
|
+
"generated_key_identifier_1",
|
|
74
|
+
"generated_key_identifier_2"
|
|
75
|
+
],
|
|
76
|
+
"positions": {
|
|
77
|
+
"key_form": 5,
|
|
78
|
+
"key_length": 6,
|
|
79
|
+
"key_type_1": 7,
|
|
80
|
+
"key_type_2": 8,
|
|
81
|
+
"KEK_key_identifier_1": 9,
|
|
82
|
+
"KEK_key_identifier_2": 10,
|
|
83
|
+
"generated_key_identifier_1": 11,
|
|
84
|
+
"generated_key_identifier_2": 12
|
|
85
|
+
},
|
|
86
|
+
"keywords": {
|
|
87
|
+
"key_form": {
|
|
88
|
+
"_field": "4-byte, left-justified, blank-padded (IBM's COBOL sample declares it PIC X(08)). First two characters describe key 1, last two key 2.",
|
|
89
|
+
"OP": "One key wrapped under the master key, usable locally. Required form for AES keys.",
|
|
90
|
+
"IM": "One key wrapped under an importer KEK, to be imported here later.",
|
|
91
|
+
"EX": "One key wrapped under an exporter KEK, to be sent to another system.",
|
|
92
|
+
"OPOP": "Two operational keys with the same clear value, normally different control vectors.",
|
|
93
|
+
"OPIM": "Same clear value: one operational, one importable.",
|
|
94
|
+
"OPEX": "Same clear value: one operational, one exportable.",
|
|
95
|
+
"IMIM": "Same clear value: both importable.",
|
|
96
|
+
"IMEX": "Same clear value: one importable, one exportable.",
|
|
97
|
+
"EXEX": "Same clear value: both exportable."
|
|
98
|
+
},
|
|
99
|
+
"key_length": {
|
|
100
|
+
"_field": "8-byte, left-justified, blank-padded. Required.",
|
|
101
|
+
"SINGLE": "DES, 8-byte single-length key (56-bit).",
|
|
102
|
+
"KEYLN8": "Same as SINGLE: DES single-length 8-byte key.",
|
|
103
|
+
"SINGLE-R": "DES 16-byte key whose two halves are identical, so it behaves as a single-length key. Needs the 'Key Generate - SINGLE-R' access control point.",
|
|
104
|
+
"DOUBLE": "DES 16-byte key; the halves are not guaranteed to differ.",
|
|
105
|
+
"KEYLN16": "With a DES key_type_1: double-length DES key like DOUBLE. With key_type_1 AESDATA or AESTOKEN: 128-bit AES key.",
|
|
106
|
+
"DOUBLE-O": "DES 16-byte key with halves guaranteed to differ.",
|
|
107
|
+
"KEYLN24": "With DES key type DATA only: triple-length key in a version 1 token with an all-zero control vector. With AESDATA/AESTOKEN: 192-bit AES key.",
|
|
108
|
+
"TRIPLE": "DES 24-byte key; the three parts are not guaranteed to differ. For DATA, a version 0 token with a DATA control vector.",
|
|
109
|
+
"TRIPLE-O": "DES 24-byte key with three distinct parts.",
|
|
110
|
+
"KEYLN32": "AES only: 256-bit key."
|
|
111
|
+
},
|
|
112
|
+
"key_type_1": {
|
|
113
|
+
"_field": "8-byte, left-justified, blank-padded.",
|
|
114
|
+
"AESDATA": "Generate an AES DATA key; generated_key_identifier_1 is ignored.",
|
|
115
|
+
"AESTOKEN": "Generate an AES DATA key using an AES token supplied in generated_key_identifier_1; key_length sets the size.",
|
|
116
|
+
"TOKEN": "Key type is taken from the control vector of the token in generated_key_identifier_1; for DATA, key_length still sets the length. Not resolvable from the CALL alone.",
|
|
117
|
+
"_des_types": [
|
|
118
|
+
"CIPHER",
|
|
119
|
+
"CIPHERXI",
|
|
120
|
+
"CIPHERXL",
|
|
121
|
+
"CIPHERXO",
|
|
122
|
+
"DATA",
|
|
123
|
+
"DATAC",
|
|
124
|
+
"DATAM",
|
|
125
|
+
"DATAMV",
|
|
126
|
+
"DECIPHER",
|
|
127
|
+
"ENCIPHER",
|
|
128
|
+
"EXPORTER",
|
|
129
|
+
"IKEYXLAT",
|
|
130
|
+
"IMPORTER",
|
|
131
|
+
"IPINENC",
|
|
132
|
+
"MAC",
|
|
133
|
+
"MACVER",
|
|
134
|
+
"OKEYXLAT",
|
|
135
|
+
"OPINENC",
|
|
136
|
+
"PINGEN",
|
|
137
|
+
"PINVER"
|
|
138
|
+
],
|
|
139
|
+
"_token_only_types": [
|
|
140
|
+
"CVARDEC",
|
|
141
|
+
"CVARENC",
|
|
142
|
+
"CVARPINE",
|
|
143
|
+
"CVARXCVL",
|
|
144
|
+
"CVARXCVR",
|
|
145
|
+
"DATAC",
|
|
146
|
+
"DKYGENKY",
|
|
147
|
+
"KEYGENKY"
|
|
148
|
+
],
|
|
149
|
+
"_token_only_note": "These types are requested by passing TOKEN with a skeleton token carrying the right control vector."
|
|
150
|
+
},
|
|
151
|
+
"key_type_2": {
|
|
152
|
+
"_field": "8-byte, left-justified, blank-padded. Used only for key pairs and only for DES; ignored when one key is generated.",
|
|
153
|
+
"_values": [
|
|
154
|
+
"CIPHER",
|
|
155
|
+
"CIPHERXI",
|
|
156
|
+
"CIPHERXL",
|
|
157
|
+
"CIPHERXO",
|
|
158
|
+
"DATA",
|
|
159
|
+
"DATAC",
|
|
160
|
+
"DATAM",
|
|
161
|
+
"DATAMV",
|
|
162
|
+
"DECIPHER",
|
|
163
|
+
"ENCIPHER",
|
|
164
|
+
"EXPORTER",
|
|
165
|
+
"IKEYXLAT",
|
|
166
|
+
"IMPORTER",
|
|
167
|
+
"IPINENC",
|
|
168
|
+
"MAC",
|
|
169
|
+
"MACVER",
|
|
170
|
+
"OKEYXLAT",
|
|
171
|
+
"OPINENC",
|
|
172
|
+
"PINGEN",
|
|
173
|
+
"PINVER",
|
|
174
|
+
"TOKEN"
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"single_length_des": {
|
|
179
|
+
"key_length_keywords": [
|
|
180
|
+
"SINGLE",
|
|
181
|
+
"KEYLN8",
|
|
182
|
+
"SINGLE-R"
|
|
183
|
+
],
|
|
184
|
+
"condition": "key_type_1 is a DES type (anything except AESDATA/AESTOKEN). SINGLE-R gives a 16-byte token whose effective strength is single DES.",
|
|
185
|
+
"key_types_allowing_single_or_keyln8": [
|
|
186
|
+
"DATA",
|
|
187
|
+
"MAC",
|
|
188
|
+
"MACVER",
|
|
189
|
+
"CIPHER",
|
|
190
|
+
"DECIPHER",
|
|
191
|
+
"ENCIPHER",
|
|
192
|
+
"CVARDEC",
|
|
193
|
+
"CVARENC",
|
|
194
|
+
"CVARPINE",
|
|
195
|
+
"CVARXCVL",
|
|
196
|
+
"CVARXCVR"
|
|
197
|
+
],
|
|
198
|
+
"key_types_where_single_is_the_table_default": [
|
|
199
|
+
"DATA",
|
|
200
|
+
"MAC",
|
|
201
|
+
"MACVER",
|
|
202
|
+
"CIPHER",
|
|
203
|
+
"DECIPHER",
|
|
204
|
+
"ENCIPHER"
|
|
205
|
+
],
|
|
206
|
+
"key_types_allowing_single_r": [
|
|
207
|
+
"DATAC",
|
|
208
|
+
"DATAM",
|
|
209
|
+
"DATAMV",
|
|
210
|
+
"DKYGENKY",
|
|
211
|
+
"KEYGENKY",
|
|
212
|
+
"EXPORTER",
|
|
213
|
+
"IMPORTER",
|
|
214
|
+
"IKEYXLAT",
|
|
215
|
+
"OKEYXLAT",
|
|
216
|
+
"IPINENC",
|
|
217
|
+
"OPINENC",
|
|
218
|
+
"PINGEN",
|
|
219
|
+
"PINVER",
|
|
220
|
+
"MAC",
|
|
221
|
+
"MACVER",
|
|
222
|
+
"CIPHER",
|
|
223
|
+
"DECIPHER",
|
|
224
|
+
"ENCIPHER"
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
"weak": {
|
|
228
|
+
"SINGLE": {
|
|
229
|
+
"basis": "ibm",
|
|
230
|
+
"why": "56-bit single DES key; IBM's compliance appendix says single-length keys cannot be compliant-tagged."
|
|
231
|
+
},
|
|
232
|
+
"KEYLN8": {
|
|
233
|
+
"basis": "ibm",
|
|
234
|
+
"why": "Synonym of SINGLE."
|
|
235
|
+
},
|
|
236
|
+
"SINGLE-R": {
|
|
237
|
+
"basis": "ibm",
|
|
238
|
+
"why": "IBM: the replicated halves make it effectively a single-length key."
|
|
239
|
+
},
|
|
240
|
+
"DOUBLE": {
|
|
241
|
+
"basis": "judgement",
|
|
242
|
+
"why": "Two-key triple DES; IBM does not guarantee distinct halves (DOUBLE-O does)."
|
|
243
|
+
},
|
|
244
|
+
"KEYLN16": {
|
|
245
|
+
"basis": "judgement",
|
|
246
|
+
"why": "Two-key triple DES only when key_type_1 is a DES type; 128-bit AES with AESDATA/AESTOKEN is not weak."
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"notes": "key_length alone does not decide the algorithm: KEYLN16 and KEYLN24 mean DES or AES depending on key_type_1 (AES only with AESDATA/AESTOKEN). A single-DES key generated here makes any later CSNBENC/CSNBDEC/CSNBSYE/CSNBSYD call with that key run single DES, because those services pick DES vs TDES from the key's length. With key_type TOKEN the type comes from a skeleton token at run time. IBM's own COBOL sample generates an OP SINGLE DATA key.",
|
|
250
|
+
"doc_quirks": [
|
|
251
|
+
"The AES key-length table spells the keywords KEYLEN16/KEYLEN24/KEYLEN32; the key_length parameter table spells them KEYLN16/KEYLN24/KEYLN32.",
|
|
252
|
+
"The DES key-length table marks a 'default' length per key type although the key_length text says a value must be supplied."
|
|
253
|
+
]
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"name": "CSNBKGN2",
|
|
257
|
+
"title": "Key Generate2 (CSNBKGN2 and CSNEKGN2)",
|
|
258
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=keys-key-generate2-csnbkgn2-csnekgn2",
|
|
259
|
+
"entry_points": {
|
|
260
|
+
"31-bit": [
|
|
261
|
+
"CSNBKGN2",
|
|
262
|
+
"CSFKGN2"
|
|
263
|
+
],
|
|
264
|
+
"64-bit": [
|
|
265
|
+
"CSNEKGN2",
|
|
266
|
+
"CSFKGN26"
|
|
267
|
+
],
|
|
268
|
+
"alet": null
|
|
269
|
+
},
|
|
270
|
+
"parameters": [
|
|
271
|
+
"return_code",
|
|
272
|
+
"reason_code",
|
|
273
|
+
"exit_data_length",
|
|
274
|
+
"exit_data",
|
|
275
|
+
"rule_array_count",
|
|
276
|
+
"rule_array",
|
|
277
|
+
"clear_key_bit_length",
|
|
278
|
+
"key_type_1",
|
|
279
|
+
"key_type_2",
|
|
280
|
+
"key_name_1_length",
|
|
281
|
+
"key_name_1",
|
|
282
|
+
"key_name_2_length",
|
|
283
|
+
"key_name_2",
|
|
284
|
+
"user_associated_data_1_length",
|
|
285
|
+
"user_associated_data_1",
|
|
286
|
+
"user_associated_data_2_length",
|
|
287
|
+
"user_associated_data_2",
|
|
288
|
+
"key_encrypting_key_identifier_1_length",
|
|
289
|
+
"key_encrypting_key_identifier_1",
|
|
290
|
+
"key_encrypting_key_identifier_2_length",
|
|
291
|
+
"key_encrypting_key_identifier_2",
|
|
292
|
+
"generated_key_identifier_1_length",
|
|
293
|
+
"generated_key_identifier_1",
|
|
294
|
+
"generated_key_identifier_2_length",
|
|
295
|
+
"generated_key_identifier_2"
|
|
296
|
+
],
|
|
297
|
+
"positions": {
|
|
298
|
+
"rule_array_count": 5,
|
|
299
|
+
"rule_array": 6,
|
|
300
|
+
"clear_key_bit_length": 7,
|
|
301
|
+
"key_type_1": 8,
|
|
302
|
+
"key_type_2": 9
|
|
303
|
+
},
|
|
304
|
+
"keywords": {
|
|
305
|
+
"rule_array_count": "2, 3 or 4.",
|
|
306
|
+
"rule_array": {
|
|
307
|
+
"HMAC": "Algorithm (required group): generate an HMAC key.",
|
|
308
|
+
"AES": "Algorithm (required group): generate an AES key.",
|
|
309
|
+
"OP": "Key form (required group): one operational key.",
|
|
310
|
+
"IM": "Key form: one importable key.",
|
|
311
|
+
"EX": "Key form: one exportable key.",
|
|
312
|
+
"OPOP": "Key form: pair with the same clear value.",
|
|
313
|
+
"OPIM": "Key form: operational plus importable.",
|
|
314
|
+
"OPEX": "Key form: operational plus exportable.",
|
|
315
|
+
"IMIM": "Key form: both importable.",
|
|
316
|
+
"IMEX": "Key form: importable plus exportable.",
|
|
317
|
+
"EXEX": "Key form: both exportable.",
|
|
318
|
+
"V0PYLDK1": "Optional: old variable-length payload format for key 1 (AES CIPHER/EXPORTER/IMPORTER only).",
|
|
319
|
+
"V1PYLDK1": "Optional: fixed-length payload format for key 1.",
|
|
320
|
+
"V0PYLDK2": "Optional: old variable-length payload format for key 2.",
|
|
321
|
+
"V1PYLDK2": "Optional: fixed-length payload format for key 2."
|
|
322
|
+
},
|
|
323
|
+
"clear_key_bit_length": "Integer: 80 to 2048 bits for HMAC; 128, 192 or 256 for AES. Overrides the token's length when key_type is TOKEN.",
|
|
324
|
+
"key_type_1": {
|
|
325
|
+
"CIPHER": "AES",
|
|
326
|
+
"EXPORTER": "AES",
|
|
327
|
+
"IMPORTER": "AES",
|
|
328
|
+
"MAC": "HMAC",
|
|
329
|
+
"MACVER": "HMAC",
|
|
330
|
+
"TOKEN": "Type taken from the associated data of the token in generated_key_identifier_1."
|
|
331
|
+
},
|
|
332
|
+
"key_type_2": {
|
|
333
|
+
"CIPHER": "AES",
|
|
334
|
+
"EXPORTER": "AES",
|
|
335
|
+
"IMPORTER": "AES",
|
|
336
|
+
"MAC": "HMAC",
|
|
337
|
+
"MACVER": "HMAC",
|
|
338
|
+
"TOKEN": "Type taken from the token in generated_key_identifier_2; ignored for a single key."
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
"can_generate_single_des": false,
|
|
342
|
+
"weak": {
|
|
343
|
+
"HMAC with small clear_key_bit_length": {
|
|
344
|
+
"basis": "judgement",
|
|
345
|
+
"why": "IBM allows HMAC keys down to 80 bits."
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"notes": "Exists. Generates only AES and HMAC keys in variable-length tokens wrapped with AESKW; the only algorithm keywords are HMAC and AES, so it cannot produce a DES key of any length. A single DES key needs CSNBKGN."
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"name": "CSNBENC",
|
|
352
|
+
"title": "Encipher (CSNBENC or CSNBENC1 and CSNEENC or CSNEENC1)",
|
|
353
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=data-encipher-csnbenc-csnbenc1-csneenc-csneenc1",
|
|
354
|
+
"entry_points": {
|
|
355
|
+
"31-bit": [
|
|
356
|
+
"CSNBENC",
|
|
357
|
+
"CSFENC"
|
|
358
|
+
],
|
|
359
|
+
"64-bit": [
|
|
360
|
+
"CSNEENC",
|
|
361
|
+
"CSFENC6"
|
|
362
|
+
],
|
|
363
|
+
"alet": {
|
|
364
|
+
"31-bit": [
|
|
365
|
+
"CSNBENC1",
|
|
366
|
+
"CSFENC1"
|
|
367
|
+
],
|
|
368
|
+
"64-bit": [
|
|
369
|
+
"CSNEENC1",
|
|
370
|
+
"CSFENC16"
|
|
371
|
+
],
|
|
372
|
+
"extra_parameters": [
|
|
373
|
+
"clear_text_id",
|
|
374
|
+
"cipher_text_id"
|
|
375
|
+
]
|
|
376
|
+
}
|
|
377
|
+
},
|
|
378
|
+
"parameters": [
|
|
379
|
+
"return_code",
|
|
380
|
+
"reason_code",
|
|
381
|
+
"exit_data_length",
|
|
382
|
+
"exit_data",
|
|
383
|
+
"key_identifier",
|
|
384
|
+
"text_length",
|
|
385
|
+
"clear_text",
|
|
386
|
+
"initialization_vector",
|
|
387
|
+
"rule_array_count",
|
|
388
|
+
"rule_array",
|
|
389
|
+
"pad_character",
|
|
390
|
+
"chaining_vector",
|
|
391
|
+
"cipher_text"
|
|
392
|
+
],
|
|
393
|
+
"positions": {
|
|
394
|
+
"key_identifier": 5,
|
|
395
|
+
"text_length": 6,
|
|
396
|
+
"clear_text": 7,
|
|
397
|
+
"initialization_vector": 8,
|
|
398
|
+
"rule_array_count": 9,
|
|
399
|
+
"rule_array": 10,
|
|
400
|
+
"pad_character": 11,
|
|
401
|
+
"chaining_vector": 12,
|
|
402
|
+
"cipher_text": 13
|
|
403
|
+
},
|
|
404
|
+
"keywords": {
|
|
405
|
+
"rule_array_count": "1, 2 or 3.",
|
|
406
|
+
"rule_array_layout": "Positional: slot 1 processing rule; slot 2 ICV selection; slot 3 algorithm. If the ICV selection is omitted (defaults to INITIAL), the algorithm moves to slot 2.",
|
|
407
|
+
"processing_rule": {
|
|
408
|
+
"CBC": "Plain CBC (NIST SP 800-38A); text must be a multiple of 8 bytes; output same length.",
|
|
409
|
+
"CUSP": "CBC compatible with IBM CUSP/PCF; any length, output same length; a trailing short block is XORed with the re-enciphered previous ciphertext block, and a text under 8 bytes is XORed with the enciphered ICV.",
|
|
410
|
+
"IPS": "CBC compatible with IBM IPS record chaining; any length, output same length; short blocks are enciphered as in CUSP, but the OCV is built from the ciphertext rather than a re-enciphered block, so it can chain records.",
|
|
411
|
+
"X9.23": "CBC with ANSI X9.23 padding of 1 to 8 bytes; always pads.",
|
|
412
|
+
"4700-PAD": "CBC padded with the caller's pad_character plus a one-byte count; output is a multiple of 8."
|
|
413
|
+
},
|
|
414
|
+
"icv_selection": {
|
|
415
|
+
"INITIAL": "Default. ICV comes from initialization_vector.",
|
|
416
|
+
"CONTINUE": "ICV comes from the OCV saved in chaining_vector by the previous call. Only with CBC, IPS, CUSP."
|
|
417
|
+
},
|
|
418
|
+
"algorithm": {
|
|
419
|
+
"TOKEN": "Default. Use the algorithm marked in the DATA key token.",
|
|
420
|
+
"DES": "Use DES and ignore the token's marking."
|
|
421
|
+
},
|
|
422
|
+
"not_present": [
|
|
423
|
+
"ECB",
|
|
424
|
+
"AES"
|
|
425
|
+
]
|
|
426
|
+
},
|
|
427
|
+
"algorithms": "DES family only. key_identifier is a 64-byte DES token of type DATA, CIPHER or ENCIPHER, a label, or an X9.143 DES/TDES block.",
|
|
428
|
+
"single_vs_triple_des": "Chosen by the length of the key in key_identifier: single-length gives single DES; double- or triple-length gives triple DES. No rule-array keyword selects it.",
|
|
429
|
+
"icv": "8-byte initialization_vector. Encipher XORs it into the first 8 bytes of plaintext before encryption; each ciphertext block is then XORed into the next plaintext block. The OCV (first 8 bytes of the 18-byte chaining_vector work area) can be passed as the next call's ICV, or picked up with CONTINUE, to chain records. The same ICV must be used to decipher.",
|
|
430
|
+
"weak": {
|
|
431
|
+
"single-length key in key_identifier": {
|
|
432
|
+
"basis": "ibm",
|
|
433
|
+
"why": "Runs single DES (56-bit); see CSNBKGN SINGLE/KEYLN8/SINGLE-R."
|
|
434
|
+
},
|
|
435
|
+
"any call": {
|
|
436
|
+
"basis": "judgement",
|
|
437
|
+
"why": "Only DES/TDES are available; there is no AES path in this service."
|
|
438
|
+
},
|
|
439
|
+
"constant or all-zero ICV": {
|
|
440
|
+
"basis": "judgement",
|
|
441
|
+
"why": "IBM notes that 8 zero bytes nullify the chaining effect on the first block; IBM's COBOL sample passes LOW-VALUES."
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
"notes": "No ECB keyword exists here; every rule is a CBC variant. Weakness is decided by the key (its length, set when it was generated) and by the ICV, not by a keyword. CUSP/IPS short blocks are enciphered stream-fashion from the previous block or the ICV, so with a fixed ICV a message under 8 bytes is XORed with a fixed keystream.",
|
|
445
|
+
"doc_quirks": [
|
|
446
|
+
"The overview list names the rules 'ANSI X9.23' and 'IBM 4700'; the keywords are X9.23 and 4700-PAD."
|
|
447
|
+
]
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"name": "CSNBDEC",
|
|
451
|
+
"title": "Decipher (CSNBDEC or CSNBDEC1 and CSNEDEC or CSNEDEC1)",
|
|
452
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=data-decipher-csnbdec-csnbdec1-csnedec-csnedec1",
|
|
453
|
+
"entry_points": {
|
|
454
|
+
"31-bit": [
|
|
455
|
+
"CSNBDEC",
|
|
456
|
+
"CSFDEC"
|
|
457
|
+
],
|
|
458
|
+
"64-bit": [
|
|
459
|
+
"CSNEDEC",
|
|
460
|
+
"CSFDEC6"
|
|
461
|
+
],
|
|
462
|
+
"alet": {
|
|
463
|
+
"31-bit": [
|
|
464
|
+
"CSNBDEC1",
|
|
465
|
+
"CSFDEC1"
|
|
466
|
+
],
|
|
467
|
+
"64-bit": [
|
|
468
|
+
"CSNEDEC1",
|
|
469
|
+
"CSFDEC16"
|
|
470
|
+
],
|
|
471
|
+
"extra_parameters": [
|
|
472
|
+
"cipher_text_id",
|
|
473
|
+
"clear_text_id"
|
|
474
|
+
]
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
"parameters": [
|
|
478
|
+
"return_code",
|
|
479
|
+
"reason_code",
|
|
480
|
+
"exit_data_length",
|
|
481
|
+
"exit_data",
|
|
482
|
+
"key_identifier",
|
|
483
|
+
"text_length",
|
|
484
|
+
"cipher_text",
|
|
485
|
+
"initialization_vector",
|
|
486
|
+
"rule_array_count",
|
|
487
|
+
"rule_array",
|
|
488
|
+
"chaining_vector",
|
|
489
|
+
"clear_text"
|
|
490
|
+
],
|
|
491
|
+
"positions": {
|
|
492
|
+
"key_identifier": 5,
|
|
493
|
+
"text_length": 6,
|
|
494
|
+
"cipher_text": 7,
|
|
495
|
+
"initialization_vector": 8,
|
|
496
|
+
"rule_array_count": 9,
|
|
497
|
+
"rule_array": 10,
|
|
498
|
+
"chaining_vector": 11,
|
|
499
|
+
"clear_text": 12
|
|
500
|
+
},
|
|
501
|
+
"keywords": {
|
|
502
|
+
"rule_array_count": "1, 2 or 3.",
|
|
503
|
+
"rule_array_layout": "Positional: slot 1 processing rule; slot 2 ICV selection; slot 3 algorithm. If the ICV selection is omitted (defaults to INITIAL), the algorithm moves to slot 2.",
|
|
504
|
+
"processing_rule": {
|
|
505
|
+
"CBC": "Plain CBC (NIST SP 800-38A); text must be a multiple of 8 bytes; output same length.",
|
|
506
|
+
"CUSP": "CBC compatible with IBM CUSP/PCF; any length, output same length; a trailing short block is XORed with the re-enciphered previous ciphertext block, and a text under 8 bytes is XORed with the enciphered ICV.",
|
|
507
|
+
"IPS": "CBC compatible with IBM IPS record chaining; any length, output same length; short blocks are enciphered as in CUSP, but the OCV is built from the ciphertext rather than a re-enciphered block, so it can chain records.",
|
|
508
|
+
"X9.23": "CBC with ANSI X9.23 padding removed; ciphertext must be a multiple of 8.",
|
|
509
|
+
"4700-PAD": "CBC with IBM 4700 padding removed; ciphertext must be a multiple of 8."
|
|
510
|
+
},
|
|
511
|
+
"icv_selection": {
|
|
512
|
+
"INITIAL": "Default. ICV comes from initialization_vector.",
|
|
513
|
+
"CONTINUE": "ICV comes from the OCV saved in chaining_vector by the previous call. Only with CBC, IPS, CUSP."
|
|
514
|
+
},
|
|
515
|
+
"algorithm": {
|
|
516
|
+
"TOKEN": "Default. Use the algorithm marked in the DATA key token.",
|
|
517
|
+
"DES": "Use DES and ignore the token's marking."
|
|
518
|
+
},
|
|
519
|
+
"not_present": [
|
|
520
|
+
"ECB",
|
|
521
|
+
"AES"
|
|
522
|
+
]
|
|
523
|
+
},
|
|
524
|
+
"algorithms": "DES family only. key_identifier is a 64-byte DES token of type DATA, CIPHER or DECIPHER, a label, or an X9.143 DES/TDES block.",
|
|
525
|
+
"single_vs_triple_des": "Chosen by the length of the key in key_identifier: single-length gives single DES; double- or triple-length gives triple DES.",
|
|
526
|
+
"icv": "8-byte initialization_vector. Each ciphertext block is deciphered and XORed with the ICV (first block) or the previous ciphertext block. Must equal the ICV used to encipher.",
|
|
527
|
+
"weak": {
|
|
528
|
+
"single-length key in key_identifier": {
|
|
529
|
+
"basis": "ibm",
|
|
530
|
+
"why": "Runs single DES (56-bit)."
|
|
531
|
+
},
|
|
532
|
+
"any call": {
|
|
533
|
+
"basis": "judgement",
|
|
534
|
+
"why": "Only DES/TDES are available."
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
"notes": "Unlike CSNBENC there is no pad_character, so chaining_vector is position 11 and clear_text position 12. Same rule-array keywords and positional layout as CSNBENC; no ECB."
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
"name": "CSNBSYE",
|
|
541
|
+
"title": "Symmetric Key Encipher (CSNBSYE or CSNBSYE1 and CSNESYE or CSNESYE1)",
|
|
542
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=data-symmetric-key-encipher-csnbsye-csnbsye1-csnesye-csnesye1",
|
|
543
|
+
"entry_points": {
|
|
544
|
+
"31-bit": [
|
|
545
|
+
"CSNBSYE",
|
|
546
|
+
"CSFSYE"
|
|
547
|
+
],
|
|
548
|
+
"64-bit": [
|
|
549
|
+
"CSNESYE",
|
|
550
|
+
"CSFSYE6"
|
|
551
|
+
],
|
|
552
|
+
"alet": {
|
|
553
|
+
"31-bit": [
|
|
554
|
+
"CSNBSYE1",
|
|
555
|
+
"CSFSYE1"
|
|
556
|
+
],
|
|
557
|
+
"64-bit": [
|
|
558
|
+
"CSNESYE1",
|
|
559
|
+
"CSFSYE16"
|
|
560
|
+
],
|
|
561
|
+
"extra_parameters": [
|
|
562
|
+
"clear_text_id",
|
|
563
|
+
"cipher_text_id"
|
|
564
|
+
]
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
"parameters": [
|
|
568
|
+
"return_code",
|
|
569
|
+
"reason_code",
|
|
570
|
+
"exit_data_length",
|
|
571
|
+
"exit_data",
|
|
572
|
+
"rule_array_count",
|
|
573
|
+
"rule_array",
|
|
574
|
+
"key_identifier_length",
|
|
575
|
+
"key_identifier",
|
|
576
|
+
"key_parms_length",
|
|
577
|
+
"key_parms",
|
|
578
|
+
"block_size",
|
|
579
|
+
"initialization_vector_length",
|
|
580
|
+
"initialization_vector",
|
|
581
|
+
"chain_data_length",
|
|
582
|
+
"chain_data",
|
|
583
|
+
"clear_text_length",
|
|
584
|
+
"clear_text",
|
|
585
|
+
"cipher_text_length",
|
|
586
|
+
"cipher_text",
|
|
587
|
+
"optional_data_length",
|
|
588
|
+
"optional_data"
|
|
589
|
+
],
|
|
590
|
+
"positions": {
|
|
591
|
+
"rule_array_count": 5,
|
|
592
|
+
"rule_array": 6,
|
|
593
|
+
"key_identifier_length": 7,
|
|
594
|
+
"key_identifier": 8,
|
|
595
|
+
"key_parms_length": 9,
|
|
596
|
+
"key_parms": 10,
|
|
597
|
+
"block_size": 11,
|
|
598
|
+
"initialization_vector_length": 12,
|
|
599
|
+
"initialization_vector": 13,
|
|
600
|
+
"chain_data_length": 14,
|
|
601
|
+
"chain_data": 15,
|
|
602
|
+
"optional_data_length": 20,
|
|
603
|
+
"optional_data": 21,
|
|
604
|
+
"clear_text_length": 16,
|
|
605
|
+
"clear_text": 17,
|
|
606
|
+
"cipher_text_length": 18,
|
|
607
|
+
"cipher_text": 19
|
|
608
|
+
},
|
|
609
|
+
"keywords": {
|
|
610
|
+
"rule_array_count": "1 to 4.",
|
|
611
|
+
"rule_array_layout": "Not positional: one keyword per group (algorithm required; processing rule, key rule, ICV selection optional).",
|
|
612
|
+
"rule_array": {
|
|
613
|
+
"AES": "Algorithm (required): AES, 16-byte block, 16/24/32-byte key. Not with CUSP, IPS or X9.23.",
|
|
614
|
+
"DES": "Algorithm (required): DES; single DES or TDES chosen by key length (8, 16 or 24 bytes). Not with CTR or GCM.",
|
|
615
|
+
"CBC": "Mode (default): CBC; text a multiple of the block size.",
|
|
616
|
+
"CBC-CS": "CBC with ciphertext stealing (CBC-CS1); text at least one block.",
|
|
617
|
+
"CFB": "Cipher feedback with segment = block size.",
|
|
618
|
+
"CFB-LCFB": "Cipher feedback with caller-set segment size in key_parms (1 byte).",
|
|
619
|
+
"CTR": "Counter mode; key_parms gives how many low-order counter bytes increment. AES only.",
|
|
620
|
+
"CUSP": "CBC compatible with IBM CUSP/PCF; any length. DES only.",
|
|
621
|
+
"ECB": "Electronic codebook; no ICV; text a multiple of the block size.",
|
|
622
|
+
"GCM": "Galois/Counter mode; key_parms_length is the tag length, key_parms holds the tag, optional_data holds AAD. AES only.",
|
|
623
|
+
"GCM-LG": "GCM producing/checking legacy tags (pre-OA46558) for 256 MiB or larger inputs.",
|
|
624
|
+
"IPS": "CBC compatible with IBM IPS; any length. DES only.",
|
|
625
|
+
"OFB": "Output feedback.",
|
|
626
|
+
"PKCS-PAD": "CBC with PKCS padding; always pads.",
|
|
627
|
+
"X9.23": "CBC with ANSI X9.23 padding. DES only.",
|
|
628
|
+
"KEY-CLR": "Key rule (default): key_identifier holds the clear key value; key_identifier_length is its byte length.",
|
|
629
|
+
"KEYIDENT": "Key rule: key_identifier is an internal clear token or a CKDS label (clear or encrypted key); key_identifier_length must be 64.",
|
|
630
|
+
"INITIAL": "ICV selection (default): ICV from initialization_vector. Not with GCM.",
|
|
631
|
+
"CONTINUE": "ICV selection: ICV from the OCV in chain_data. Not with ECB, GCM, X9.23.",
|
|
632
|
+
"FINAL": "ICV selection: ICV from chain_data; last piece of chained data. CBC, CBC-CS, CFB, CFB-LCFB, CTR, OFB.",
|
|
633
|
+
"ONLY": "ICV selection: ICV from initialization_vector; whole message in one call. CBC, CBC-CS, CFB, CFB-LCFB, CTR, GCM, OFB."
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
"algorithms": "AES (128/192/256-bit) and DES (56-, 112- or 168-bit key, by key length). Clear keys, clear tokens, or CKDS labels.",
|
|
637
|
+
"icv": "initialization_vector, length in initialization_vector_length (block size; NIST-recommended 12 bytes for GCM). Used by every mode except ECB, where it is ignored. The OCV is kept in chain_data (first 8 bytes for DES, first 16 for AES) and can feed the next call.",
|
|
638
|
+
"weak": {
|
|
639
|
+
"DES with an 8-byte key": {
|
|
640
|
+
"basis": "ibm",
|
|
641
|
+
"why": "Single DES with a 56-bit key; IBM lists 56-, 112- and 168-bit DES key sizes and picks single DES for an 8-byte key. With KEY-CLR a key_identifier_length of 8 shows it; with KEYIDENT the length is inside the token."
|
|
642
|
+
},
|
|
643
|
+
"DES": {
|
|
644
|
+
"basis": "judgement",
|
|
645
|
+
"why": "Even 16/24-byte keys give TDES with an 8-byte block."
|
|
646
|
+
},
|
|
647
|
+
"ECB": {
|
|
648
|
+
"basis": "judgement",
|
|
649
|
+
"why": "No chaining; identical blocks give identical ciphertext."
|
|
650
|
+
},
|
|
651
|
+
"GCM with key_parms_length 4 or 8": {
|
|
652
|
+
"basis": "ibm",
|
|
653
|
+
"why": "IBM: tag lengths of 4 or 8 are strongly discouraged."
|
|
654
|
+
},
|
|
655
|
+
"KEY-CLR": {
|
|
656
|
+
"basis": "judgement",
|
|
657
|
+
"why": "Not an algorithm weakness: the clear key value sits in program storage. It is the default when no key rule is given."
|
|
658
|
+
}
|
|
659
|
+
},
|
|
660
|
+
"notes": "The algorithm keyword is always present (AES or DES). DES plus an 8-byte key is single DES. ECB is a keyword here, unlike CSNBENC. Default mode when none is given is CBC.",
|
|
661
|
+
"doc_quirks": [
|
|
662
|
+
"The introduction mentions 'ICV selection rules FIRST and MIDDLE', which are not in the keyword table (INITIAL, CONTINUE, FINAL, ONLY). Not verified as keywords.",
|
|
663
|
+
"The CSNBSYE1 format names position 7 'length'; the parameter description calls it key_identifier_length."
|
|
664
|
+
]
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"name": "CSNBSYD",
|
|
668
|
+
"title": "Symmetric Key Decipher (CSNBSYD or CSNBSYD1 and CSNESYD or CSNESYD1)",
|
|
669
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=data-symmetric-key-decipher-csnbsyd-csnbsyd1-csnesyd-csnesyd1",
|
|
670
|
+
"entry_points": {
|
|
671
|
+
"31-bit": [
|
|
672
|
+
"CSNBSYD",
|
|
673
|
+
"CSFSYD"
|
|
674
|
+
],
|
|
675
|
+
"64-bit": [
|
|
676
|
+
"CSNESYD",
|
|
677
|
+
"CSFSYD6"
|
|
678
|
+
],
|
|
679
|
+
"alet": {
|
|
680
|
+
"31-bit": [
|
|
681
|
+
"CSNBSYD1",
|
|
682
|
+
"CSFSYD1"
|
|
683
|
+
],
|
|
684
|
+
"64-bit": [
|
|
685
|
+
"CSNESYD1",
|
|
686
|
+
"CSFSYD16"
|
|
687
|
+
],
|
|
688
|
+
"extra_parameters": [
|
|
689
|
+
"cipher_text_id",
|
|
690
|
+
"clear_text_id"
|
|
691
|
+
]
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
"parameters": [
|
|
695
|
+
"return_code",
|
|
696
|
+
"reason_code",
|
|
697
|
+
"exit_data_length",
|
|
698
|
+
"exit_data",
|
|
699
|
+
"rule_array_count",
|
|
700
|
+
"rule_array",
|
|
701
|
+
"key_identifier_length",
|
|
702
|
+
"key_identifier",
|
|
703
|
+
"key_parms_length",
|
|
704
|
+
"key_parms",
|
|
705
|
+
"block_size",
|
|
706
|
+
"initialization_vector_length",
|
|
707
|
+
"initialization_vector",
|
|
708
|
+
"chain_data_length",
|
|
709
|
+
"chain_data",
|
|
710
|
+
"cipher_text_length",
|
|
711
|
+
"cipher_text",
|
|
712
|
+
"clear_text_length",
|
|
713
|
+
"clear_text",
|
|
714
|
+
"optional_data_length",
|
|
715
|
+
"optional_data"
|
|
716
|
+
],
|
|
717
|
+
"positions": {
|
|
718
|
+
"rule_array_count": 5,
|
|
719
|
+
"rule_array": 6,
|
|
720
|
+
"key_identifier_length": 7,
|
|
721
|
+
"key_identifier": 8,
|
|
722
|
+
"key_parms_length": 9,
|
|
723
|
+
"key_parms": 10,
|
|
724
|
+
"block_size": 11,
|
|
725
|
+
"initialization_vector_length": 12,
|
|
726
|
+
"initialization_vector": 13,
|
|
727
|
+
"chain_data_length": 14,
|
|
728
|
+
"chain_data": 15,
|
|
729
|
+
"optional_data_length": 20,
|
|
730
|
+
"optional_data": 21,
|
|
731
|
+
"cipher_text_length": 16,
|
|
732
|
+
"cipher_text": 17,
|
|
733
|
+
"clear_text_length": 18,
|
|
734
|
+
"clear_text": 19
|
|
735
|
+
},
|
|
736
|
+
"keywords": {
|
|
737
|
+
"rule_array_count": "1 to 4.",
|
|
738
|
+
"rule_array_layout": "Not positional: one keyword per group (algorithm required; processing rule, key rule, ICV selection optional).",
|
|
739
|
+
"rule_array": {
|
|
740
|
+
"AES": "Algorithm (required): AES, 16-byte block, 16/24/32-byte key. Not with CUSP, IPS or X9.23.",
|
|
741
|
+
"DES": "Algorithm (required): DES; single DES or TDES chosen by key length (8, 16 or 24 bytes). Not with CTR or GCM.",
|
|
742
|
+
"CBC": "Mode (default): CBC; text a multiple of the block size.",
|
|
743
|
+
"CBC-CS": "CBC with ciphertext stealing (CBC-CS1); text at least one block.",
|
|
744
|
+
"CFB": "Cipher feedback with segment = block size.",
|
|
745
|
+
"CFB-LCFB": "Cipher feedback with caller-set segment size in key_parms (1 byte).",
|
|
746
|
+
"CTR": "Counter mode; key_parms gives how many low-order counter bytes increment. AES only.",
|
|
747
|
+
"CUSP": "CBC compatible with IBM CUSP/PCF; any length. DES only.",
|
|
748
|
+
"ECB": "Electronic codebook; no ICV; text a multiple of the block size.",
|
|
749
|
+
"GCM": "Galois/Counter mode; key_parms_length is the tag length, key_parms holds the tag, optional_data holds AAD. AES only.",
|
|
750
|
+
"GCM-LG": "GCM producing/checking legacy tags (pre-OA46558) for 256 MiB or larger inputs.",
|
|
751
|
+
"IPS": "CBC compatible with IBM IPS; any length. DES only.",
|
|
752
|
+
"OFB": "Output feedback.",
|
|
753
|
+
"PKCS-PAD": "CBC with PKCS padding; always pads.",
|
|
754
|
+
"X9.23": "CBC with ANSI X9.23 padding. DES only.",
|
|
755
|
+
"KEY-CLR": "Key rule (default): key_identifier holds the clear key value; key_identifier_length is its byte length.",
|
|
756
|
+
"KEYIDENT": "Key rule: key_identifier is an internal clear token or a CKDS label (clear or encrypted key); key_identifier_length must be 64.",
|
|
757
|
+
"INITIAL": "ICV selection (default): ICV from initialization_vector. Not with GCM.",
|
|
758
|
+
"CONTINUE": "ICV selection: ICV from the OCV in chain_data. Not with ECB, GCM, X9.23.",
|
|
759
|
+
"FINAL": "ICV selection: ICV from chain_data; last piece of chained data. CBC, CBC-CS, CFB, CFB-LCFB, CTR, OFB.",
|
|
760
|
+
"ONLY": "ICV selection: ICV from initialization_vector; whole message in one call. CBC, CBC-CS, CFB, CFB-LCFB, CTR, GCM, OFB."
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
"algorithms": "AES and DES, as CSNBSYE.",
|
|
764
|
+
"icv": "initialization_vector must equal the one used to encipher; ignored for ECB.",
|
|
765
|
+
"weak": {
|
|
766
|
+
"DES with an 8-byte key": {
|
|
767
|
+
"basis": "ibm",
|
|
768
|
+
"why": "Single DES with a 56-bit key; IBM lists 56-, 112- and 168-bit DES key sizes and picks single DES for an 8-byte key. With KEY-CLR a key_identifier_length of 8 shows it; with KEYIDENT the length is inside the token."
|
|
769
|
+
},
|
|
770
|
+
"DES": {
|
|
771
|
+
"basis": "judgement",
|
|
772
|
+
"why": "Even 16/24-byte keys give TDES with an 8-byte block."
|
|
773
|
+
},
|
|
774
|
+
"ECB": {
|
|
775
|
+
"basis": "judgement",
|
|
776
|
+
"why": "No chaining; identical blocks give identical ciphertext."
|
|
777
|
+
},
|
|
778
|
+
"GCM with key_parms_length 4 or 8": {
|
|
779
|
+
"basis": "ibm",
|
|
780
|
+
"why": "IBM: tag lengths of 4 or 8 are strongly discouraged."
|
|
781
|
+
},
|
|
782
|
+
"KEY-CLR": {
|
|
783
|
+
"basis": "judgement",
|
|
784
|
+
"why": "Not an algorithm weakness: the clear key value sits in program storage. It is the default when no key rule is given."
|
|
785
|
+
}
|
|
786
|
+
},
|
|
787
|
+
"notes": "Same keywords as CSNBSYE. Positions 16 to 19 are swapped relative to CSNBSYE: cipher_text_length, cipher_text, clear_text_length, clear_text.",
|
|
788
|
+
"doc_quirks": [
|
|
789
|
+
"The introduction mentions ICV selection rules FIRST and MIDDLE, which are not in the keyword table."
|
|
790
|
+
]
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"name": "CSNBSAE",
|
|
794
|
+
"title": "Symmetric Algorithm Encipher (CSNBSAE or CSNBSAE1 and CSNESAE or CSNESAE1)",
|
|
795
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=data-symmetric-algorithm-encipher-csnbsae-csnbsae1-csnesae-csnesae1",
|
|
796
|
+
"entry_points": {
|
|
797
|
+
"31-bit": [
|
|
798
|
+
"CSNBSAE",
|
|
799
|
+
"CSFSAE"
|
|
800
|
+
],
|
|
801
|
+
"64-bit": [
|
|
802
|
+
"CSNESAE",
|
|
803
|
+
"CSFSAE6"
|
|
804
|
+
],
|
|
805
|
+
"alet": {
|
|
806
|
+
"31-bit": [
|
|
807
|
+
"CSNBSAE1",
|
|
808
|
+
"CSFSAE1"
|
|
809
|
+
],
|
|
810
|
+
"64-bit": [
|
|
811
|
+
"CSNESAE1",
|
|
812
|
+
"CSFSAE16"
|
|
813
|
+
],
|
|
814
|
+
"extra_parameters": [
|
|
815
|
+
"clear_text_id",
|
|
816
|
+
"cipher_text_id"
|
|
817
|
+
]
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
"parameters": [
|
|
821
|
+
"return_code",
|
|
822
|
+
"reason_code",
|
|
823
|
+
"exit_data_length",
|
|
824
|
+
"exit_data",
|
|
825
|
+
"rule_array_count",
|
|
826
|
+
"rule_array",
|
|
827
|
+
"key_identifier_length",
|
|
828
|
+
"key_identifier",
|
|
829
|
+
"key_parms_length",
|
|
830
|
+
"key_parms",
|
|
831
|
+
"block_size",
|
|
832
|
+
"initialization_vector_length",
|
|
833
|
+
"initialization_vector",
|
|
834
|
+
"chain_data_length",
|
|
835
|
+
"chain_data",
|
|
836
|
+
"clear_text_length",
|
|
837
|
+
"clear_text",
|
|
838
|
+
"cipher_text_length",
|
|
839
|
+
"cipher_text",
|
|
840
|
+
"optional_data_length",
|
|
841
|
+
"optional_data"
|
|
842
|
+
],
|
|
843
|
+
"positions": {
|
|
844
|
+
"rule_array_count": 5,
|
|
845
|
+
"rule_array": 6,
|
|
846
|
+
"key_identifier_length": 7,
|
|
847
|
+
"key_identifier": 8,
|
|
848
|
+
"key_parms_length": 9,
|
|
849
|
+
"key_parms": 10,
|
|
850
|
+
"block_size": 11,
|
|
851
|
+
"initialization_vector_length": 12,
|
|
852
|
+
"initialization_vector": 13,
|
|
853
|
+
"chain_data_length": 14,
|
|
854
|
+
"chain_data": 15,
|
|
855
|
+
"optional_data_length": 20,
|
|
856
|
+
"optional_data": 21,
|
|
857
|
+
"clear_text_length": 16,
|
|
858
|
+
"clear_text": 17,
|
|
859
|
+
"cipher_text_length": 18,
|
|
860
|
+
"cipher_text": 19
|
|
861
|
+
},
|
|
862
|
+
"keywords": {
|
|
863
|
+
"rule_array_count": "2 to 5.",
|
|
864
|
+
"rule_array_layout": "Not positional: one keyword per group.",
|
|
865
|
+
"rule_array": {
|
|
866
|
+
"AES": "Algorithm (required group): AES, 16-byte block, 128/192/256-bit key.",
|
|
867
|
+
"DES": "Algorithm: DES, valid only with the AS2805 rules A28MACGN, A28MACVR, A28OWFEC, A28OWFCL.",
|
|
868
|
+
"CBC": "AES mode (default): CBC; multiple of 16 bytes.",
|
|
869
|
+
"ECB": "AES mode: electronic codebook; multiple of 16 bytes; no IV.",
|
|
870
|
+
"GCM": "AES mode: Galois/Counter; tag length in key_parms_length, tag in key_parms, AAD in optional_data.",
|
|
871
|
+
"PKCS-PAD": "AES mode: CBC with PKCS padding.",
|
|
872
|
+
"X9.23PAD": "AES mode: CBC with X9.23 padding.",
|
|
873
|
+
"A28MACGN": "DES rule: generate an AS2805.5.4 MAC with a double-length DES MAC key.",
|
|
874
|
+
"A28MACVR": "DES rule: verify an AS2805.5.4 MAC; needs a residue keyword.",
|
|
875
|
+
"A28OWFCL": "DES rule: AS2805.5.4 one-way function over clear chain_data with a double-length DES CIPHER key.",
|
|
876
|
+
"A28OWFEC": "DES rule: AS2805.5.4 one-way function over ECB-encrypted chain_data.",
|
|
877
|
+
"A28RES": "Residue (with A28MACVR): chain_data holds a residue.",
|
|
878
|
+
"A28NORES": "Residue (with A28MACVR): no residue.",
|
|
879
|
+
"KEYIDENT": "Key rule (required): key_identifier is a secure key token or CKDS label.",
|
|
880
|
+
"INITIAL": "ICV selection: IV from initialization_vector; default for CBC and PKCS-PAD; not with GCM.",
|
|
881
|
+
"CONTINUE": "ICV selection: IV from chain_data; CBC or PKCS-PAD only.",
|
|
882
|
+
"ONLY": "ICV selection: single request; required for GCM; default for the A28 rules."
|
|
883
|
+
}
|
|
884
|
+
},
|
|
885
|
+
"algorithms": "Data encryption is AES only. DES appears only for AS2805 MAC and one-way-function processing with double-length DES keys.",
|
|
886
|
+
"icv": "initialization_vector holds the IV for CBC, GCM, PKCS-PAD and X9.23PAD; ignored for ECB and the A28 rules.",
|
|
887
|
+
"weak": {
|
|
888
|
+
"ECB": {
|
|
889
|
+
"basis": "judgement",
|
|
890
|
+
"why": "No chaining."
|
|
891
|
+
},
|
|
892
|
+
"GCM with key_parms_length 4 or 8": {
|
|
893
|
+
"basis": "ibm",
|
|
894
|
+
"why": "IBM: tag lengths of 4 or 8 are strongly discouraged."
|
|
895
|
+
},
|
|
896
|
+
"DES (A28*)": {
|
|
897
|
+
"basis": "judgement",
|
|
898
|
+
"why": "Double-length DES keys for AS2805 MAC/OWF; not data encryption."
|
|
899
|
+
}
|
|
900
|
+
},
|
|
901
|
+
"notes": "Exists. Secure keys only (KEYIDENT is the only key rule). DES cannot be used to encipher data here."
|
|
902
|
+
},
|
|
903
|
+
{
|
|
904
|
+
"name": "CSNBSAD",
|
|
905
|
+
"title": "Symmetric Algorithm Decipher (CSNBSAD or CSNBSAD1 and CSNESAD or CSNESAD1)",
|
|
906
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=data-symmetric-algorithm-decipher-csnbsad-csnbsad1-csnesad-csnesad1",
|
|
907
|
+
"entry_points": {
|
|
908
|
+
"31-bit": [
|
|
909
|
+
"CSNBSAD",
|
|
910
|
+
"CSFSAD"
|
|
911
|
+
],
|
|
912
|
+
"64-bit": [
|
|
913
|
+
"CSNESAD",
|
|
914
|
+
"CSFSAD6"
|
|
915
|
+
],
|
|
916
|
+
"alet": {
|
|
917
|
+
"31-bit": [
|
|
918
|
+
"CSNBSAD1",
|
|
919
|
+
"CSFSAD1"
|
|
920
|
+
],
|
|
921
|
+
"64-bit": [
|
|
922
|
+
"CSNESAD1",
|
|
923
|
+
"CSFSAD16"
|
|
924
|
+
],
|
|
925
|
+
"extra_parameters": [
|
|
926
|
+
"cipher_text_id",
|
|
927
|
+
"clear_text_id"
|
|
928
|
+
]
|
|
929
|
+
}
|
|
930
|
+
},
|
|
931
|
+
"parameters": [
|
|
932
|
+
"return_code",
|
|
933
|
+
"reason_code",
|
|
934
|
+
"exit_data_length",
|
|
935
|
+
"exit_data",
|
|
936
|
+
"rule_array_count",
|
|
937
|
+
"rule_array",
|
|
938
|
+
"key_identifier_length",
|
|
939
|
+
"key_identifier",
|
|
940
|
+
"key_parms_length",
|
|
941
|
+
"key_parms",
|
|
942
|
+
"block_size",
|
|
943
|
+
"initialization_vector_length",
|
|
944
|
+
"initialization_vector",
|
|
945
|
+
"chain_data_length",
|
|
946
|
+
"chain_data",
|
|
947
|
+
"cipher_text_length",
|
|
948
|
+
"cipher_text",
|
|
949
|
+
"clear_text_length",
|
|
950
|
+
"clear_text",
|
|
951
|
+
"optional_data_length",
|
|
952
|
+
"optional_data"
|
|
953
|
+
],
|
|
954
|
+
"positions": {
|
|
955
|
+
"rule_array_count": 5,
|
|
956
|
+
"rule_array": 6,
|
|
957
|
+
"key_identifier_length": 7,
|
|
958
|
+
"key_identifier": 8,
|
|
959
|
+
"key_parms_length": 9,
|
|
960
|
+
"key_parms": 10,
|
|
961
|
+
"block_size": 11,
|
|
962
|
+
"initialization_vector_length": 12,
|
|
963
|
+
"initialization_vector": 13,
|
|
964
|
+
"chain_data_length": 14,
|
|
965
|
+
"chain_data": 15,
|
|
966
|
+
"optional_data_length": 20,
|
|
967
|
+
"optional_data": 21,
|
|
968
|
+
"cipher_text_length": 16,
|
|
969
|
+
"cipher_text": 17,
|
|
970
|
+
"clear_text_length": 18,
|
|
971
|
+
"clear_text": 19
|
|
972
|
+
},
|
|
973
|
+
"keywords": {
|
|
974
|
+
"rule_array_count": "2 to 4.",
|
|
975
|
+
"rule_array_layout": "Not positional: one keyword per group.",
|
|
976
|
+
"rule_array": {
|
|
977
|
+
"AES": "Algorithm (required): AES only.",
|
|
978
|
+
"CBC": "Mode (default): CBC.",
|
|
979
|
+
"ECB": "Mode: electronic codebook; IV ignored.",
|
|
980
|
+
"GCM": "Mode: Galois/Counter; tag verified before data is returned.",
|
|
981
|
+
"PKCS-PAD": "Mode: CBC, PKCS padding removed.",
|
|
982
|
+
"X9.23PAD": "Mode: CBC, padding removed.",
|
|
983
|
+
"KEYIDENT": "Key rule (required): secure AES key token or CKDS label.",
|
|
984
|
+
"INITIAL": "ICV selection: default for CBC and PKCS-PAD; not with GCM.",
|
|
985
|
+
"CONTINUE": "ICV selection: IV from chain_data; CBC or PKCS-PAD only.",
|
|
986
|
+
"ONLY": "ICV selection: required for GCM."
|
|
987
|
+
}
|
|
988
|
+
},
|
|
989
|
+
"algorithms": "AES only; no DES keyword.",
|
|
990
|
+
"icv": "initialization_vector must equal the one used to encrypt; ignored for ECB.",
|
|
991
|
+
"weak": {
|
|
992
|
+
"ECB": {
|
|
993
|
+
"basis": "judgement",
|
|
994
|
+
"why": "No chaining."
|
|
995
|
+
}
|
|
996
|
+
},
|
|
997
|
+
"notes": "Exists. Positions 16 to 19 are cipher_text_length, cipher_text, clear_text_length, clear_text.",
|
|
998
|
+
"doc_quirks": [
|
|
999
|
+
"The CSNBSAD1 format names position 7 'key_length'; the CSNBSAD format and parameter description call it key_identifier_length.",
|
|
1000
|
+
"The X9.23PAD description says the cleartext was padded 'according to the PKCS padding scheme'."
|
|
1001
|
+
]
|
|
1002
|
+
},
|
|
1003
|
+
{
|
|
1004
|
+
"name": "CSNBOWH",
|
|
1005
|
+
"title": "One-Way Hash Generate (CSNBOWH or CSNBOWH1 and CSNEOWH or CSNEOWH1)",
|
|
1006
|
+
"url": "https://www.ibm.com/docs/en/zos/3.1.0?topic=vdiam-one-way-hash-generate-csnbowh-csnbowh1-csneowh-csneowh1",
|
|
1007
|
+
"entry_points": {
|
|
1008
|
+
"31-bit": [
|
|
1009
|
+
"CSNBOWH",
|
|
1010
|
+
"CSFOWH"
|
|
1011
|
+
],
|
|
1012
|
+
"64-bit": [
|
|
1013
|
+
"CSNEOWH",
|
|
1014
|
+
"CSFOWH6"
|
|
1015
|
+
],
|
|
1016
|
+
"alet": {
|
|
1017
|
+
"31-bit": [
|
|
1018
|
+
"CSNBOWH1",
|
|
1019
|
+
"CSFOWH1"
|
|
1020
|
+
],
|
|
1021
|
+
"64-bit": [
|
|
1022
|
+
"CSNEOWH1",
|
|
1023
|
+
"CSFOWH16"
|
|
1024
|
+
],
|
|
1025
|
+
"extra_parameters": [
|
|
1026
|
+
"text_id_in"
|
|
1027
|
+
]
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
"parameters": [
|
|
1031
|
+
"return_code",
|
|
1032
|
+
"reason_code",
|
|
1033
|
+
"exit_data_length",
|
|
1034
|
+
"exit_data",
|
|
1035
|
+
"rule_array_count",
|
|
1036
|
+
"rule_array",
|
|
1037
|
+
"text_length",
|
|
1038
|
+
"text",
|
|
1039
|
+
"chaining_vector_length",
|
|
1040
|
+
"chaining_vector",
|
|
1041
|
+
"hash_length",
|
|
1042
|
+
"hash"
|
|
1043
|
+
],
|
|
1044
|
+
"positions": {
|
|
1045
|
+
"rule_array_count": 5,
|
|
1046
|
+
"rule_array": 6,
|
|
1047
|
+
"text_length": 7,
|
|
1048
|
+
"text": 8,
|
|
1049
|
+
"chaining_vector_length": 9,
|
|
1050
|
+
"chaining_vector": 10,
|
|
1051
|
+
"hash_length": 11,
|
|
1052
|
+
"hash": 12
|
|
1053
|
+
},
|
|
1054
|
+
"keywords": {
|
|
1055
|
+
"rule_array_count": "1 or 2.",
|
|
1056
|
+
"rule_array_layout": "Not positional: hash method (required) plus a chaining flag or, with BCRYPT, a salt flag.",
|
|
1057
|
+
"rule_array": {
|
|
1058
|
+
"BCRYPT": "bcrypt version 2b password hash (60-byte result); needs GENERATE or VERIFY; no chaining.",
|
|
1059
|
+
"MD5": "MD5, 16-byte digest.",
|
|
1060
|
+
"MD5-LG": "MD5 reproducing legacy values from before APAR OA33657, for checking archived hashes.",
|
|
1061
|
+
"RPMD-160": "RIPEMD-160, 20-byte digest.",
|
|
1062
|
+
"RPMD-LG": "RIPEMD-160 reproducing legacy values from before APAR OA33657.",
|
|
1063
|
+
"SHA-1": "SHA-1, 20-byte digest.",
|
|
1064
|
+
"SHA1LG": "SHA-1 reproducing legacy values (pre-OA43937) for texts of 256 MB or more.",
|
|
1065
|
+
"SHA-224": "SHA-224, 28-byte digest.",
|
|
1066
|
+
"SHA224LG": "SHA-224 legacy variant for very large texts.",
|
|
1067
|
+
"SHA-256": "SHA-256, 32-byte digest.",
|
|
1068
|
+
"SHA256LG": "SHA-256 legacy variant for very large texts.",
|
|
1069
|
+
"SHA-384": "SHA-384, 48-byte digest.",
|
|
1070
|
+
"SHA384LG": "SHA-384 legacy variant for very large texts.",
|
|
1071
|
+
"SHA-512": "SHA-512, 64-byte digest.",
|
|
1072
|
+
"SHA512LG": "SHA-512 legacy variant for very large texts.",
|
|
1073
|
+
"SHA3-224": "SHA3-224.",
|
|
1074
|
+
"SHA3-256": "SHA3-256.",
|
|
1075
|
+
"SHA3-384": "SHA3-384.",
|
|
1076
|
+
"SHA3-512": "SHA3-512.",
|
|
1077
|
+
"SHAKE128": "SHAKE-128 extendable output; hash_length sets output size.",
|
|
1078
|
+
"SHAKE256": "SHAKE-256 extendable output.",
|
|
1079
|
+
"FIRST": "Chaining flag: first of a chained series.",
|
|
1080
|
+
"MIDDLE": "Chaining flag: middle call.",
|
|
1081
|
+
"LAST": "Chaining flag: last call.",
|
|
1082
|
+
"ONLY": "Chaining flag (default): single unchained call.",
|
|
1083
|
+
"GENERATE": "Salt flag (BCRYPT): hash with a random salt; cost in chaining_vector byte 1 (4 to 31).",
|
|
1084
|
+
"VERIFY": "Salt flag (BCRYPT): verify the hash parameter."
|
|
1085
|
+
}
|
|
1086
|
+
},
|
|
1087
|
+
"weak": {
|
|
1088
|
+
"MD5": {
|
|
1089
|
+
"basis": "judgement",
|
|
1090
|
+
"why": "Broken collision resistance."
|
|
1091
|
+
},
|
|
1092
|
+
"MD5-LG": {
|
|
1093
|
+
"basis": "judgement",
|
|
1094
|
+
"why": "MD5 family."
|
|
1095
|
+
},
|
|
1096
|
+
"SHA-1": {
|
|
1097
|
+
"basis": "ibm",
|
|
1098
|
+
"why": "IBM's compliance appendix excludes the SHA-1 hash method for compliant-tagged RSA keys and certificates; SHA-1 is also collision-broken (judgement)."
|
|
1099
|
+
},
|
|
1100
|
+
"SHA1LG": {
|
|
1101
|
+
"basis": "judgement",
|
|
1102
|
+
"why": "SHA-1 family."
|
|
1103
|
+
},
|
|
1104
|
+
"RPMD-160": {
|
|
1105
|
+
"basis": "judgement",
|
|
1106
|
+
"why": "160-bit legacy hash."
|
|
1107
|
+
},
|
|
1108
|
+
"RPMD-LG": {
|
|
1109
|
+
"basis": "judgement",
|
|
1110
|
+
"why": "RIPEMD-160 family."
|
|
1111
|
+
}
|
|
1112
|
+
},
|
|
1113
|
+
"notes": "The hash method is always in the rule array; it never comes from a key. The -LG keywords exist to match hashes computed by older ICSF levels."
|
|
1114
|
+
}
|
|
1115
|
+
],
|
|
1116
|
+
"variants": {
|
|
1117
|
+
"csne_64bit": "Every service above has an AMODE(64) entry point (CSNEKGN, CSNEKGN2, CSNEENC, CSNEDEC, CSNESYE, CSNESYD, CSNESAE, CSNESAD, CSNEOWH). Each topic prints one format and names the CSNE entry under it; no separate CSNE parameter list is printed, so the same list is implied (for SAE/SAD IBM states the B and E forms 'provide identical functions').",
|
|
1118
|
+
"alet_1": "CSNBENC1, CSNBDEC1, CSNBSYE1, CSNBSYD1, CSNBSAE1, CSNBSAD1, CSNBOWH1 (and CSNExxx1) take the same list plus trailing ALET parameters for data in a data space. There is no CSNBKGN1 or CSNBKGN21.",
|
|
1119
|
+
"csf_aliases": "IBM says CSFxxxx can be used in place of CSNBxxx. 31-bit ICSF names: CSFKGN, CSFKGN2, CSFENC, CSFENC1, CSFDEC, CSFDEC1, CSFSYE, CSFSYE1, CSFSYD, CSFSYD1, CSFSAE, CSFSAE1, CSFSAD, CSFSAD1, CSFOWH, CSFOWH1. 64-bit ICSF names add a trailing 6 (CSFKGN6, CSFENC16, ...)."
|
|
1120
|
+
},
|
|
1121
|
+
"unverified": [
|
|
1122
|
+
"That the CSNE (64-bit) parameter lists are identical: inferred from the single format per topic, not from a separately printed CSNE list.",
|
|
1123
|
+
"Whether FIRST/MIDDLE are accepted as ICV-selection keywords by CSNBSYE/CSNBSYD: mentioned in the introduction only.",
|
|
1124
|
+
"The z/OS 3.2 edition was not compared."
|
|
1125
|
+
],
|
|
1126
|
+
"findings": {
|
|
1127
|
+
"single-length-des-key": {
|
|
1128
|
+
"services": [
|
|
1129
|
+
"CSNBKGN"
|
|
1130
|
+
],
|
|
1131
|
+
"parameter": "key_length",
|
|
1132
|
+
"keywords": [
|
|
1133
|
+
"SINGLE",
|
|
1134
|
+
"KEYLN8",
|
|
1135
|
+
"SINGLE-R"
|
|
1136
|
+
],
|
|
1137
|
+
"basis": "IBM: SINGLE and KEYLN8 generate an 8-byte, 56-bit DES key, and SINGLE-R a 16-byte key with identical halves that behaves as single-length (Key Generate topic). NIST SP 800-131A Rev. 2, Table 1, approves no single-key DES and disallows two-key TDEA for encryption.",
|
|
1138
|
+
"sources": [
|
|
1139
|
+
"https://www.ibm.com/docs/en/zos/3.1.0?topic=keys-key-generate-csnbkgn-csnekgn",
|
|
1140
|
+
"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf"
|
|
1141
|
+
]
|
|
1142
|
+
},
|
|
1143
|
+
"weak-hash": {
|
|
1144
|
+
"services": [
|
|
1145
|
+
"CSNBOWH"
|
|
1146
|
+
],
|
|
1147
|
+
"parameter": "rule_array",
|
|
1148
|
+
"keywords": [
|
|
1149
|
+
"MD5",
|
|
1150
|
+
"MD5-LG",
|
|
1151
|
+
"SHA-1",
|
|
1152
|
+
"SHA1LG"
|
|
1153
|
+
],
|
|
1154
|
+
"basis": "CWE-328 gives CVE-2005-4900 (SHA-1 is not collision-resistant) and CVE-2012-6707 (an MD5-based password hash) among its observed examples. NIST SP 800-131A Rev. 2 restricts SHA-1 for digital signature generation to where protocol guidance allows it.",
|
|
1155
|
+
"sources": [
|
|
1156
|
+
"https://cwe.mitre.org/data/definitions/328.html",
|
|
1157
|
+
"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf"
|
|
1158
|
+
]
|
|
1159
|
+
},
|
|
1160
|
+
"fixed-initialization-vector": {
|
|
1161
|
+
"services": [
|
|
1162
|
+
"CSNBENC",
|
|
1163
|
+
"CSNBSYE",
|
|
1164
|
+
"CSNBSAE"
|
|
1165
|
+
],
|
|
1166
|
+
"parameter": "initialization_vector",
|
|
1167
|
+
"withoutVector": [
|
|
1168
|
+
"ECB",
|
|
1169
|
+
"CONTINUE"
|
|
1170
|
+
],
|
|
1171
|
+
"basis": "CWE-1204. IBM (Encipher): CUSP and IPS encipher a short block from the ICV, so a fixed ICV is a fixed keystream for a message under 8 bytes, and in every CBC rule equal plaintexts give equal ciphertexts. ECB uses no vector, and CONTINUE takes it from the previous call's chaining vector.",
|
|
1172
|
+
"sources": [
|
|
1173
|
+
"https://cwe.mitre.org/data/definitions/1204.html",
|
|
1174
|
+
"https://www.ibm.com/docs/en/zos/3.1.0?topic=data-encipher-csnbenc-csnbenc1-csneenc-csneenc1"
|
|
1175
|
+
]
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
}
|