1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
|
.. highlight:: rst
.. toctree::
:hidden:
mitK5license.rst
.. _mitK5features:
MIT Kerberos features
=====================
https://web.mit.edu/kerberos
Quick facts
-----------
License - :ref:`mitK5license`
Releases:
- Latest stable: https://web.mit.edu/kerberos/krb5-1.18/
- Supported: https://web.mit.edu/kerberos/krb5-1.17/
- Release cycle: approximately 12 months
Supported platforms \/ OS distributions:
- Windows (KfW 4.0): Windows 7, Vista, XP
- Solaris: SPARC, x86_64/x86
- GNU/Linux: Debian x86_64/x86, Ubuntu x86_64/x86, RedHat x86_64/x86
- BSD: NetBSD x86_64/x86
Crypto backends:
- builtin - MIT Kerberos native crypto library
- OpenSSL (1.0\+) - https://www.openssl.org
Database backends: LDAP, DB2, LMDB
krb4 support: Kerberos 5 release < 1.8
DES support: Kerberos 5 release < 1.18 (See :ref:`retiring-des`)
Interoperability
----------------
`Microsoft`
Starting from release 1.7:
* Follow client principal referrals in the client library when
obtaining initial tickets.
* KDC can issue realm referrals for service principals based on domain names.
* Extensions supporting DCE RPC, including three-leg GSS context setup
and unencapsulated GSS tokens inside SPNEGO.
* Microsoft GSS_WrapEX, implemented using the gss_iov API, which is
similar to the equivalent SSPI functionality. This is needed to
support some instances of DCE RPC.
* NTLM recognition support in GSS-API, to facilitate dropping in an
NTLM implementation for improved compatibility with older releases
of Microsoft Windows.
* KDC support for principal aliases, if the back end supports them.
Currently, only the LDAP back end supports aliases.
* Support Microsoft set/change password (:rfc:`3244`) protocol in
kadmind.
* Implement client and KDC support for GSS_C_DELEG_POLICY_FLAG, which
allows a GSS application to request credential delegation only if
permitted by KDC policy.
Starting from release 1.8:
* Microsoft Services for User (S4U) compatibility
`Heimdal`
* Support for KCM credential cache starting from release 1.13
Feature list
------------
For more information on the specific project see https://k5wiki.kerberos.org/wiki/Projects
Release 1.7
- Credentials delegation :rfc:`5896`
- Cross-realm authentication and referrals :rfc:`6806`
- Master key migration
- PKINIT :rfc:`4556` :ref:`pkinit`
Release 1.8
- Anonymous PKINIT :rfc:`6112` :ref:`anonymous_pkinit`
- Constrained delegation
- IAKERB https://tools.ietf.org/html/draft-ietf-krb-wg-iakerb-02
- Heimdal bridge plugin for KDC backend
- GSS-API S4U extensions https://msdn.microsoft.com/en-us/library/cc246071
- GSS-API naming extensions :rfc:`6680`
- GSS-API extensions for storing delegated credentials :rfc:`5588`
Release 1.9
- Advance warning on password expiry
- Camellia encryption (CTS-CMAC mode) :rfc:`6803`
- KDC support for SecurID preauthentication
- kadmin over IPv6
- Trace logging :ref:`trace_logging`
- GSSAPI/KRB5 multi-realm support
- Plugin to test password quality :ref:`pwqual_plugin`
- Plugin to synchronize password changes :ref:`kadm5_hook_plugin`
- Parallel KDC
- GSS-API extentions for SASL GS2 bridge :rfc:`5801` :rfc:`5587`
- Purging old keys
- Naming extensions for delegation chain
- Password expiration API
- Windows client support (build-only)
- IPv6 support in iprop
Release 1.10
- Plugin interface for configuration :ref:`profile_plugin`
- Credentials for multiple identities :ref:`ccselect_plugin`
Release 1.11
- Client support for FAST OTP :rfc:`6560`
- GSS-API extensions for credential locations
- Responder mechanism
Release 1.12
- Plugin to control krb5_aname_to_localname and krb5_kuserok behavior :ref:`localauth_plugin`
- Plugin to control hostname-to-realm mappings and the default realm :ref:`hostrealm_plugin`
- GSSAPI extensions for constructing MIC tokens using IOV lists :ref:`gssapi_mic_token`
- Principal may refer to nonexistent policies `Policy Refcount project <https://k5wiki.kerberos.org/wiki/Projects/Policy_refcount_elimination>`_
- Support for having no long-term keys for a principal `Principals Without Keys project <https://k5wiki.kerberos.org/wiki/Projects/Principals_without_keys>`_
- Collection support to the KEYRING credential cache type on Linux :ref:`ccache_definition`
- FAST OTP preauthentication module for the KDC which uses RADIUS to validate OTP token values :ref:`otp_preauth`
- Experimental Audit plugin for KDC processing `Audit project <https://k5wiki.kerberos.org/wiki/Projects/Audit>`_
Release 1.13
- Add support for accessing KDCs via an HTTPS proxy server using
the `MS-KKDCP
<https://msdn.microsoft.com/en-us/library/hh553774.aspx>`_
protocol.
- Add support for `hierarchical incremental propagation
<https://k5wiki.kerberos.org/wiki/Projects/Hierarchical_iprop>`_,
where replicas can act as intermediates between an upstream master
and other downstream replicas.
- Add support for configuring GSS mechanisms using
``/etc/gss/mech.d/*.conf`` files in addition to
``/etc/gss/mech``.
- Add support to the LDAP KDB module for `binding to the LDAP
server using SASL
<https://k5wiki.kerberos.org/wiki/Projects/LDAP_SASL_support>`_.
- The KDC listens for TCP connections by default.
- Fix a minor key disclosure vulnerability where using the
"keepold" option to the kadmin randkey operation could return the
old keys. `[CVE-2014-5351]
<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-5351>`_
- Add client support for the Kerberos Cache Manager protocol. If
the host is running a Heimdal kcm daemon, caches served by the
daemon can be accessed with the KCM: cache type.
- When built on macOS 10.7 and higher, use "KCM:" as the default
cachetype, unless overridden by command-line options or
krb5-config values.
- Add support for doing unlocked database dumps for the DB2 KDC
back end, which would allow the KDC and kadmind to continue
accessing the database during lengthy database dumps.
Release 1.14
* Administrator experience
- Add a new kdb5_util tabdump command to provide reporting-friendly
tabular dump formats (tab-separated or CSV) for the KDC database.
Unlike the normal dump format, each output table has a fixed number
of fields. Some tables include human-readable forms of data that
are opaque in ordinary dump files. This format is also suitable for
importing into relational databases for complex queries.
- Add support to kadmin and kadmin.local for specifying a single
command line following any global options, where the command
arguments are split by the shell--for example, "kadmin getprinc
principalname". Commands issued this way do not prompt for
confirmation or display warning messages, and exit with non-zero
status if the operation fails.
- Accept the same principal flag names in kadmin as we do for the
default_principal_flags kdc.conf variable, and vice versa. Also
accept flag specifiers in the form that kadmin prints, as well as
hexadecimal numbers.
- Remove the triple-DES and RC4 encryption types from the default
value of supported_enctypes, which determines the default key and
salt types for new password-derived keys. By default, keys will
only created only for AES128 and AES256. This mitigates some types
of password guessing attacks.
- Add support for directory names in the KRB5_CONFIG and
KRB5_KDC_PROFILE environment variables.
- Add support for authentication indicators, which are ticket
annotations to indicate the strength of the initial authentication.
Add support for the "require_auth" string attribute, which can be
set on server principal entries to require an indicator when
authenticating to the server.
- Add support for key version numbers larger than 255 in keytab files,
and for version numbers up to 65535 in KDC databases.
- Transmit only one ETYPE-INFO and/or ETYPE-INFO2 entry from the KDC
during pre-authentication, corresponding to the client's most
preferred encryption type.
- Add support for server name identification (SNI) when proxying KDC
requests over HTTPS.
- Add support for the err_fmt profile parameter, which can be used to
generate custom-formatted error messages.
* Developer experience:
- Change gss_acquire_cred_with_password() to acquire credentials into
a private memory credential cache. Applications can use
gss_store_cred() to make the resulting credentials visible to other
processes.
- Change gss_acquire_cred() and SPNEGO not to acquire credentials for
IAKERB or for non-standard variants of the krb5 mechanism OID unless
explicitly requested. (SPNEGO will still accept the Microsoft
variant of the krb5 mechanism OID during negotiation.)
- Change gss_accept_sec_context() not to accept tokens for IAKERB or
for non-standard variants of the krb5 mechanism OID unless an
acceptor credential is acquired for those mechanisms.
- Change gss_acquire_cred() to immediately resolve credentials if the
time_rec parameter is not NULL, so that a correct expiration time
can be returned. Normally credential resolution is delayed until
the target name is known.
- Add krb5_prepend_error_message() and krb5_wrap_error_message() APIs,
which can be used by plugin modules or applications to add prefixes
to existing detailed error messages.
- Add krb5_c_prfplus() and krb5_c_derive_prfplus() APIs, which
implement the RFC 6113 PRF+ operation and key derivation using PRF+.
- Add support for pre-authentication mechanisms which use multiple
round trips, using the the KDC_ERR_MORE_PREAUTH_DATA_REQUIRED error
code. Add get_cookie() and set_cookie() callbacks to the kdcpreauth
interface; these callbacks can be used to save marshalled state
information in an encrypted cookie for the next request.
- Add a client_key() callback to the kdcpreauth interface to retrieve
the chosen client key, corresponding to the ETYPE-INFO2 entry sent
by the KDC.
- Add an add_auth_indicator() callback to the kdcpreauth interface,
allowing pre-authentication modules to assert authentication
indicators.
- Add support for the GSS_KRB5_CRED_NO_CI_FLAGS_X cred option to
suppress sending the confidentiality and integrity flags in GSS
initiator tokens unless they are requested by the caller. These
flags control the negotiated SASL security layer for the Microsoft
GSS-SPNEGO SASL mechanism.
- Make the FILE credential cache implementation less prone to
corruption issues in multi-threaded programs, especially on
platforms with support for open file description locks.
* Performance:
- On replica KDCs, poll the master KDC immediately after processing
a full resync, and do not require two full resyncs after the
master KDC's log file is reset.
Release 1.15
* Administrator experience:
- Add support to kadmin for remote extraction of current keys
without changing them (requires a special kadmin permission that
is excluded from the wildcard permission), with the exception of
highly protected keys.
- Add a lockdown_keys principal attribute to prevent retrieval of
the principal's keys (old or new) via the kadmin protocol. In
newly created databases, this attribute is set on the krbtgt and
kadmin principals.
- Restore recursive dump capability for DB2 back end, so sites can
more easily recover from database corruption resulting from power
failure events.
- Add DNS auto-discovery of KDC and kpasswd servers from URI
records, in addition to SRV records. URI records can convey TCP
and UDP servers and master KDC status in a single DNS lookup, and
can also point to HTTPS proxy servers.
- Add support for password history to the LDAP back end.
- Add support for principal renaming to the LDAP back end.
- Use the getrandom system call on supported Linux kernels to avoid
blocking problems when getting entropy from the operating system.
* Code quality:
- Clean up numerous compilation warnings.
- Remove various infrequently built modules, including some preauth
modules that were not built by default.
* Developer experience:
- Add support for building with OpenSSL 1.1.
- Use SHA-256 instead of MD5 for (non-cryptographic) hashing of
authenticators in the replay cache. This helps sites that must
build with FIPS 140 conformant libraries that lack MD5.
* Protocol evolution:
- Add support for the AES-SHA2 enctypes, which allows sites to
conform to Suite B crypto requirements.
Release 1.16
* Administrator experience:
- The KDC can match PKINIT client certificates against the
"pkinit_cert_match" string attribute on the client principal
entry, using the same syntax as the existing "pkinit_cert_match"
profile option.
- The ktutil addent command supports the "-k 0" option to ignore the
key version, and the "-s" option to use a non-default salt string.
- kpropd supports a --pid-file option to write a pid file at
startup, when it is run in standalone mode.
- The "encrypted_challenge_indicator" realm option can be used to
attach an authentication indicator to tickets obtained using FAST
encrypted challenge pre-authentication.
- Localization support can be disabled at build time with the
--disable-nls configure option.
* Developer experience:
- The kdcpolicy pluggable interface allows modules control whether
tickets are issued by the KDC.
- The kadm5_auth pluggable interface allows modules to control
whether kadmind grants access to a kadmin request.
- The certauth pluggable interface allows modules to control which
PKINIT client certificates can authenticate to which client
principals.
- KDB modules can use the client and KDC interface IP addresses to
determine whether to allow an AS request.
- GSS applications can query the bit strength of a krb5 GSS context
using the GSS_C_SEC_CONTEXT_SASL_SSF OID with
gss_inquire_sec_context_by_oid().
- GSS applications can query the impersonator name of a krb5 GSS
credential using the GSS_KRB5_GET_CRED_IMPERSONATOR OID with
gss_inquire_cred_by_oid().
- kdcpreauth modules can query the KDC for the canonicalized
requested client principal name, or match a principal name against
the requested client principal name with canonicalization.
* Protocol evolution:
- The client library will continue to try pre-authentication
mechanisms after most failure conditions.
- The KDC will issue trivially renewable tickets (where the
renewable lifetime is equal to or less than the ticket lifetime)
if requested by the client, to be friendlier to scripts.
- The client library will use a random nonce for TGS requests
instead of the current system time.
- For the RC4 string-to-key or PAC operations, UTF-16 is supported
(previously only UCS-2 was supported).
- When matching PKINIT client certificates, UPN SANs will be matched
correctly as UPNs, with canonicalization.
* User experience:
- Dates after the year 2038 are accepted (provided that the platform
time facilities support them), through the year 2106.
- Automatic credential cache selection based on the client realm
will take into account the fallback realm and the service
hostname.
- Referral and alternate cross-realm TGTs will not be cached,
avoiding some scenarios where they can be added to the credential
cache multiple times.
- A German translation has been added.
* Code quality:
- The build is warning-clean under clang with the configured warning
options.
- The automated test suite runs cleanly under AddressSanitizer.
Release 1.17
* Administrator experience:
- A new Kerberos database module using the Lightning Memory-Mapped
Database library (LMDB) has been added. The LMDB KDB module
should be more performant and more robust than the DB2 module, and
may become the default module for new databases in a future
release.
- "kdb5_util dump" will no longer dump policy entries when specific
principal names are requested.
* Developer experience:
- The new krb5_get_etype_info() API can be used to retrieve enctype,
salt, and string-to-key parameters from the KDC for a client
principal.
- The new GSS_KRB5_NT_ENTERPRISE_NAME name type allows enterprise
principal names to be used with GSS-API functions.
- KDC and kadmind modules which call com_err() will now write to the
log file in a format more consistent with other log messages.
- Programs which use large numbers of memory credential caches
should perform better.
* Protocol evolution:
- The SPAKE pre-authentication mechanism is now supported. This
mechanism protects against password dictionary attacks without
requiring any additional infrastructure such as certificates.
SPAKE is enabled by default on clients, but must be manually
enabled on the KDC for this release.
- PKINIT freshness tokens are now supported. Freshness tokens can
protect against scenarios where an attacker uses temporary access
to a smart card to generate authentication requests for the
future.
- Password change operations now prefer TCP over UDP, to avoid
spurious error messages about replays when a response packet is
dropped.
- The KDC now supports cross-realm S4U2Self requests when used with
a third-party KDB module such as Samba's. The client code for
cross-realm S4U2Self requests is also now more robust.
* User experience:
- The new ktutil addent -f flag can be used to fetch salt
information from the KDC for password-based keys.
- The new kdestroy -p option can be used to destroy a credential
cache within a collection by client principal name.
- The Kerberos man page has been restored, and documents the
environment variables that affect programs using the Kerberos
library.
* Code quality:
- Python test scripts now use Python 3.
- Python test scripts now display markers in verbose output, making
it easier to find where a failure occurred within the scripts.
- The Windows build system has been simplified and updated to work
with more recent versions of Visual Studio. A large volume of
unused Windows-specific code has been removed. Visual Studio 2013
or later is now required.
Release 1.18
* Administrator experience:
- Remove support for single-DES encryption types.
- Change the replay cache format to be more efficient and robust.
Replay cache filenames using the new format end with ``.rcache2``
by default.
- setuid programs will automatically ignore environment variables
that normally affect krb5 API functions, even if the caller does
not use krb5_init_secure_context().
- Add an ``enforce_ok_as_delegate`` krb5.conf relation to disable
credential forwarding during GSSAPI authentication unless the KDC
sets the ok-as-delegate bit in the service ticket.
- Use the ``permitted_enctypes`` krb5.conf setting as the default
value for ``default_tkt_enctypes`` and ``default_tgs_enctypes``.
* Developer experience:
- Implement krb5_cc_remove_cred() for all credential cache types.
- Add the krb5_pac_get_client_info() API to get the client account
name from a PAC.
* Protocol evolution:
- Add KDC support for S4U2Self requests where the user is identified
by X.509 certificate. (Requires support for certificate lookup
from a third-party KDB module.)
- Remove support for an old ("draft 9") variant of PKINIT.
- Add support for Microsoft NegoEx. (Requires one or more
third-party GSS modules implementing NegoEx mechanisms.)
- Honor the transited-policy-checked ticket flag on application
servers, eliminating the requirement to configure capaths on
servers in some scenarios.
* User experience:
- Add support for ``dns_canonicalize_hostname=fallback``, causing
host-based principal names to be tried first without DNS
canonicalization, and again with DNS canonicalization if the
un-canonicalized server is not found.
- Expand single-component hostnames in host-based principal names
when DNS canonicalization is not used, adding the system's first
DNS search path as a suffix. Add a ``qualify_shortname``
krb5.conf relation to override this suffix or disable expansion.
* Code quality:
- The libkrb5 serialization code (used to export and import krb5 GSS
security contexts) has been simplified and made type-safe.
- The libkrb5 code for creating KRB-PRIV, KRB-SAFE, and KRB-CRED
messages has been revised to conform to current coding practices.
- The test suite has been modified to work with macOS System
Integrity Protection enabled.
- The test suite incorporates soft-pkcs11 so that PKINIT PKCS11
support can always be tested.
`Pre-authentication mechanisms`
- PW-SALT :rfc:`4120#section-5.2.7.3`
- ENC-TIMESTAMP :rfc:`4120#section-5.2.7.2`
- SAM-2
- FAST negotiation framework (release 1.8) :rfc:`6113`
- PKINIT with FAST on client (release 1.10) :rfc:`6113`
- PKINIT :rfc:`4556`
- FX-COOKIE :rfc:`6113#section-5.2`
- S4U-X509-USER (release 1.8) https://msdn.microsoft.com/en-us/library/cc246091
- OTP (release 1.12) :ref:`otp_preauth`
- SPAKE (release 1.17) :ref:`spake`
`PRNG`
- modularity (release 1.9)
- Yarrow PRNG (release < 1.10)
- Fortuna PRNG (release 1.9) https://www.schneier.com/book-practical.html
- OS PRNG (release 1.10) OS's native PRNG
|