summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnder Juaristi <a@juaristi.eus>2018-10-04 14:57:47 +0200
committerAnder Juaristi <a@juaristi.eus>2018-11-01 17:56:32 +0100
commit5f9142a7f95986b85f227f5c2dcf429f27fb41e4 (patch)
treed4df8d66532ca6963891c729d03e1c40e8d0b062
parentb677f1f3856a8991383e78bfdb97b62a615ecbef (diff)
downloadgnutls-ajuaristi-update-docs.tar.gz
Update docs for session ticket key rotation [ci skip]ajuaristi-update-docs
Fix #581. Signed-off-by: Ander Juaristi <a@juaristi.eus>
-rw-r--r--doc/cha-gtls-app.texi19
1 files changed, 15 insertions, 4 deletions
diff --git a/doc/cha-gtls-app.texi b/doc/cha-gtls-app.texi
index 0288543482..6e84464f4f 100644
--- a/doc/cha-gtls-app.texi
+++ b/doc/cha-gtls-app.texi
@@ -1714,16 +1714,27 @@ for expiration.
A server supporting session tickets must generate ticket encryption
and authentication keys using @funcref{gnutls_session_ticket_key_generate}.
Those keys should be associated with the GnuTLS session using
-@funcref{gnutls_session_ticket_enable_server}, and should be rotated regularly
-(e.g., every few hours), to prevent them from becoming long-term keys which
-if revealed could be used to decrypt all previous sessions.
+@funcref{gnutls_session_ticket_enable_server}.
+
+Those will be the initial keys, but GnuTLS will rotate them regularly. The key rotation interval
+can be changed with @funcref{gnutls_db_set_cache_expiration} and will be set to
+three times the ticket expiration time (ie. three times the value given in that function).
+Every such interval, new keys will be generated from those initial keys. This is a necessary mechanism
+to prevent the keys from becoming long-term keys
+and as such preserve forward-secrecy in the issued session tickets. If no explicit key rotation interval
+is provided, GnuTLS will rotate them every 18 hours by default.
+
+The master key can be shared between processes or between systems. Processes which share the same master key
+will generate the same rotated subkeys, assuming they share the same time (irrespective of timezone differences).
@showfuncdesc{gnutls_session_ticket_enable_server}
@showfuncdesc{gnutls_session_ticket_key_generate}
@showfuncdesc{gnutls_session_resumption_requested}
The expiration time for session resumption, either in tickets or stored data
-is set using @funcref{gnutls_db_set_cache_expiration}.
+is set using @funcref{gnutls_db_set_cache_expiration}. This function also controls
+the ticket key rotation period. Currently, the session key rotation interval is set
+to 3 times the expiration time set by this function.
Under TLS 1.3, the server can send a new session ticket at any time
using @funcref{gnutls_session_ticket_send}.