{"action":"created","comment":{"url":"https://api.github.com/repos/tlswg/tls13-spec/pulls/comments/92903813","pull_request_review_id":13429601,"id":92903813,"diff_hunk":"@@ -2469,24 +2469,40 @@ selected_identity\n \n Each PSK is associated with a single Hash algorithm. For PSKs established\n via the ticket mechanism ({{NewSessionTicket}}), this is the Hash used for\n-the KDF. For externally established PSKs, the Hash algorithm MUST be set when the\n-PSK is established.\n-\n-Prior to accepting PSK key establishment, the server MUST validate the\n-corresponding binder value (see {{psk-binder}} below). If this value is\n-not present or does not validate, the server MUST abort the handshake.\n-Servers SHOULD NOT attempt to validate multiple binders; rather they\n-SHOULD select a single PSK and validate solely the binder that\n-corresponds to that PSK. In order to accept PSK key establishment, the\n-server sends a \"pre_shared_key\" extension indicating the selected\n-identity.\n-\n-Clients MUST verify that the server's selected_identity is within the\n-range supplied by the client, that the server selected a cipher suite\n-containing a Hash associated with the PSK, and that the \"key_share\", and\n-\"signature_algorithms\" extensions are consistent with the indicated\n-ke_modes and auth_modes values. If these values are not consistent,\n-the client MUST abort the handshake with an \"illegal_parameter\" alert.\n+the KDF. For externally established PSKs, the Hash algorithm MUST be\n+decided during the establishment of the PSK.\n+\n+In order to attempt a PSK key establishment, Clients SHOULD advertise at least one\n+cipher suite containing a Hash associated with the PSK.\n+\n+In order to perform a PSK key establishment, Servers SHOULD go through these steps:\n+\n+1. Servers SHOULD first pick a cipher suite.\n+\n+2. Servers SHOULD find a PSK Identity matching the Hash of the chosen cipher suite.\n+\n+3. Servers MUST attempt to validate the Binder associated to the chosen Identity.\n+\n+If no PSK Identity matching the chosen cipher suite is found, a Server SHOULD\n+process with a normal handshake and ignore any other PSK extensions.\n+\n+If the associated binder value (see {{psk-binder}} below) is not present or does\n+not validate, the Server MUST abort the handshake. Servers SHOULD NOT attempt\n+to validate multiple binders.\n+\n+If the binder validates, to finally accept the PSK key establishment, Servers MUST\n+send a \"pre_shared_key\" extension indicating the selected identity.\n+\n+Note that this process is more involved if the Client wishes to use the early_data\n+extension. Not only the Hash function should match, but the entire cipher suite as well.\n+Other extensions can also define an early_data requirement to match.","path":"draft-ietf-tls-tls13.md","position":48,"original_position":48,"commit_id":"6b88d694a9a5c5aca0cbd921ce81f6b69019e961","original_commit_id":"6b88d694a9a5c5aca0cbd921ce81f6b69019e961","user":{"login":"davidben","id":109690,"avatar_url":"https://avatars.githubusercontent.com/u/109690?v=3","gravatar_id":"","url":"https://api.github.com/users/davidben","html_url":"https://github.com/davidben","followers_url":"https://api.github.com/users/davidben/followers","following_url":"https://api.github.com/users/davidben/following{/other_user}","gists_url":"https://api.github.com/users/davidben/gists{/gist_id}","starred_url":"https://api.github.com/users/davidben/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidben/subscriptions","organizations_url":"https://api.github.com/users/davidben/orgs","repos_url":"https://api.github.com/users/davidben/repos","events_url":"https://api.github.com/users/davidben/events{/privacy}","received_events_url":"https://api.github.com/users/davidben/received_events","type":"User","site_admin":false},"body":"One argument not to do this is, unlike TLS 1.2, TLS 1.3 ticket renewal admits longer lifetimes. With dhe_psk, tickets are less scary and renewal actually refreshes the key. There's still the authentication freshness lifetime cliff, but if we later add a renewal mode that refreshes authentication, it'll be possible to maintain continuous resumption.\r\n\r\nNow suppose today I prefer AES_128_GCM_SHA256 > AES_256_GCM_SHA384 and clients support both. All my tickets will mint AES_128_GCM_SHA256 tickets and everything's lined up for continuous resumption. Now I flip my preferences to AES_256_GCM_SHA384 > AES_128_GCM_SHA256 (or deploy a new cipher or whatever). New clients will get the new preferences, but clients whose renewal train started earlier never rotate to the new settings. You can expect these kinds of pref changes to be less common, so most servers should find it preferable to miss resumption once and rotate everyone to the new settings.\r\n\r\nWe didn't have this problem in TLS 1.2 because no one does 1.2 ticket renewal and, since it didn't change the master secret, ticket lifetime should not have extended.\r\n\r\nIt's best not to be prescriptive since implementations may have different priorities, but some guidance about this issue may be worthwhile. I think this issue isn't immediately obvious.","created_at":"2016-12-16T23:32:31Z","updated_at":"2016-12-16T23:32:31Z","html_url":"https://github.com/tlswg/tls13-spec/pull/822#discussion_r92903813","pull_request_url":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822","_links":{"self":{"href":"https://api.github.com/repos/tlswg/tls13-spec/pulls/comments/92903813"},"html":{"href":"https://github.com/tlswg/tls13-spec/pull/822#discussion_r92903813"},"pull_request":{"href":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822"}}},"pull_request":{"url":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822","id":98228973,"html_url":"https://github.com/tlswg/tls13-spec/pull/822","diff_url":"https://github.com/tlswg/tls13-spec/pull/822.diff","patch_url":"https://github.com/tlswg/tls13-spec/pull/822.patch","issue_url":"https://api.github.com/repos/tlswg/tls13-spec/issues/822","number":822,"state":"open","locked":false,"title":"better explanations of the PSK key establishment process","user":{"login":"mimoo","id":1316043,"avatar_url":"https://avatars.githubusercontent.com/u/1316043?v=3","gravatar_id":"","url":"https://api.github.com/users/mimoo","html_url":"https://github.com/mimoo","followers_url":"https://api.github.com/users/mimoo/followers","following_url":"https://api.github.com/users/mimoo/following{/other_user}","gists_url":"https://api.github.com/users/mimoo/gists{/gist_id}","starred_url":"https://api.github.com/users/mimoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mimoo/subscriptions","organizations_url":"https://api.github.com/users/mimoo/orgs","repos_url":"https://api.github.com/users/mimoo/repos","events_url":"https://api.github.com/users/mimoo/events{/privacy}","received_events_url":"https://api.github.com/users/mimoo/received_events","type":"User","site_admin":false},"body":"After the discussions of https://github.com/tlswg/tls13-spec/pull/820 I took a shot at clarifying this section a bit.","created_at":"2016-12-15T20:53:23Z","updated_at":"2016-12-16T23:32:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3230ac61b76e37835ef8536a1a79b3aad89022ce","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822/commits","review_comments_url":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822/comments","review_comment_url":"https://api.github.com/repos/tlswg/tls13-spec/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tlswg/tls13-spec/issues/822/comments","statuses_url":"https://api.github.com/repos/tlswg/tls13-spec/statuses/6b88d694a9a5c5aca0cbd921ce81f6b69019e961","head":{"label":"mimoo:betterServerPsk","ref":"betterServerPsk","sha":"6b88d694a9a5c5aca0cbd921ce81f6b69019e961","user":{"login":"mimoo","id":1316043,"avatar_url":"https://avatars.githubusercontent.com/u/1316043?v=3","gravatar_id":"","url":"https://api.github.com/users/mimoo","html_url":"https://github.com/mimoo","followers_url":"https://api.github.com/users/mimoo/followers","following_url":"https://api.github.com/users/mimoo/following{/other_user}","gists_url":"https://api.github.com/users/mimoo/gists{/gist_id}","starred_url":"https://api.github.com/users/mimoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mimoo/subscriptions","organizations_url":"https://api.github.com/users/mimoo/orgs","repos_url":"https://api.github.com/users/mimoo/repos","events_url":"https://api.github.com/users/mimoo/events{/privacy}","received_events_url":"https://api.github.com/users/mimoo/received_events","type":"User","site_admin":false},"repo":{"id":76510496,"name":"tls13-spec","full_name":"mimoo/tls13-spec","owner":{"login":"mimoo","id":1316043,"avatar_url":"https://avatars.githubusercontent.com/u/1316043?v=3","gravatar_id":"","url":"https://api.github.com/users/mimoo","html_url":"https://github.com/mimoo","followers_url":"https://api.github.com/users/mimoo/followers","following_url":"https://api.github.com/users/mimoo/following{/other_user}","gists_url":"https://api.github.com/users/mimoo/gists{/gist_id}","starred_url":"https://api.github.com/users/mimoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mimoo/subscriptions","organizations_url":"https://api.github.com/users/mimoo/orgs","repos_url":"https://api.github.com/users/mimoo/repos","events_url":"https://api.github.com/users/mimoo/events{/privacy}","received_events_url":"https://api.github.com/users/mimoo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mimoo/tls13-spec","description":"TLS 1.3 Specification","fork":true,"url":"https://api.github.com/repos/mimoo/tls13-spec","forks_url":"https://api.github.com/repos/mimoo/tls13-spec/forks","keys_url":"https://api.github.com/repos/mimoo/tls13-spec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mimoo/tls13-spec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mimoo/tls13-spec/teams","hooks_url":"https://api.github.com/repos/mimoo/tls13-spec/hooks","issue_events_url":"https://api.github.com/repos/mimoo/tls13-spec/issues/events{/number}","events_url":"https://api.github.com/repos/mimoo/tls13-spec/events","assignees_url":"https://api.github.com/repos/mimoo/tls13-spec/assignees{/user}","branches_url":"https://api.github.com/repos/mimoo/tls13-spec/branches{/branch}","tags_url":"https://api.github.com/repos/mimoo/tls13-spec/tags","blobs_url":"https://api.github.com/repos/mimoo/tls13-spec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mimoo/tls13-spec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mimoo/tls13-spec/git/refs{/sha}","trees_url":"https://api.github.com/repos/mimoo/tls13-spec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mimoo/tls13-spec/statuses/{sha}","languages_url":"https://api.github.com/repos/mimoo/tls13-spec/languages","stargazers_url":"https://api.github.com/repos/mimoo/tls13-spec/stargazers","contributors_url":"https://api.github.com/repos/mimoo/tls13-spec/contributors","subscribers_url":"https://api.github.com/repos/mimoo/tls13-spec/subscribers","subscription_url":"https://api.github.com/repos/mimoo/tls13-spec/subscription","commits_url":"https://api.github.com/repos/mimoo/tls13-spec/commits{/sha}","git_commits_url":"https://api.github.com/repos/mimoo/tls13-spec/git/commits{/sha}","comments_url":"https://api.github.com/repos/mimoo/tls13-spec/comments{/number}","issue_comment_url":"https://api.github.com/repos/mimoo/tls13-spec/issues/comments{/number}","contents_url":"https://api.github.com/repos/mimoo/tls13-spec/contents/{+path}","compare_url":"https://api.github.com/repos/mimoo/tls13-spec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mimoo/tls13-spec/merges","archive_url":"https://api.github.com/repos/mimoo/tls13-spec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mimoo/tls13-spec/downloads","issues_url":"https://api.github.com/repos/mimoo/tls13-spec/issues{/number}","pulls_url":"https://api.github.com/repos/mimoo/tls13-spec/pulls{/number}","milestones_url":"https://api.github.com/repos/mimoo/tls13-spec/milestones{/number}","notifications_url":"https://api.github.com/repos/mimoo/tls13-spec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mimoo/tls13-spec/labels{/name}","releases_url":"https://api.github.com/repos/mimoo/tls13-spec/releases{/id}","deployments_url":"https://api.github.com/repos/mimoo/tls13-spec/deployments","created_at":"2016-12-15T01:03:23Z","updated_at":"2016-12-15T01:03:24Z","pushed_at":"2016-12-16T21:51:06Z","git_url":"git://github.com/mimoo/tls13-spec.git","ssh_url":"git@github.com:mimoo/tls13-spec.git","clone_url":"https://github.com/mimoo/tls13-spec.git","svn_url":"https://github.com/mimoo/tls13-spec","homepage":null,"size":5974,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"tlswg:master","ref":"master","sha":"668a8bbe223349e0ce71145bbce69a02fcd52cda","user":{"login":"tlswg","id":6699659,"avatar_url":"https://avatars.githubusercontent.com/u/6699659?v=3","gravatar_id":"","url":"https://api.github.com/users/tlswg","html_url":"https://github.com/tlswg","followers_url":"https://api.github.com/users/tlswg/followers","following_url":"https://api.github.com/users/tlswg/following{/other_user}","gists_url":"https://api.github.com/users/tlswg/gists{/gist_id}","starred_url":"https://api.github.com/users/tlswg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tlswg/subscriptions","organizations_url":"https://api.github.com/users/tlswg/orgs","repos_url":"https://api.github.com/users/tlswg/repos","events_url":"https://api.github.com/users/tlswg/events{/privacy}","received_events_url":"https://api.github.com/users/tlswg/received_events","type":"Organization","site_admin":false},"repo":{"id":18887842,"name":"tls13-spec","full_name":"tlswg/tls13-spec","owner":{"login":"tlswg","id":6699659,"avatar_url":"https://avatars.githubusercontent.com/u/6699659?v=3","gravatar_id":"","url":"https://api.github.com/users/tlswg","html_url":"https://github.com/tlswg","followers_url":"https://api.github.com/users/tlswg/followers","following_url":"https://api.github.com/users/tlswg/following{/other_user}","gists_url":"https://api.github.com/users/tlswg/gists{/gist_id}","starred_url":"https://api.github.com/users/tlswg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tlswg/subscriptions","organizations_url":"https://api.github.com/users/tlswg/orgs","repos_url":"https://api.github.com/users/tlswg/repos","events_url":"https://api.github.com/users/tlswg/events{/privacy}","received_events_url":"https://api.github.com/users/tlswg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tlswg/tls13-spec","description":"TLS 1.3 Specification","fork":false,"url":"https://api.github.com/repos/tlswg/tls13-spec","forks_url":"https://api.github.com/repos/tlswg/tls13-spec/forks","keys_url":"https://api.github.com/repos/tlswg/tls13-spec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tlswg/tls13-spec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tlswg/tls13-spec/teams","hooks_url":"https://api.github.com/repos/tlswg/tls13-spec/hooks","issue_events_url":"https://api.github.com/repos/tlswg/tls13-spec/issues/events{/number}","events_url":"https://api.github.com/repos/tlswg/tls13-spec/events","assignees_url":"https://api.github.com/repos/tlswg/tls13-spec/assignees{/user}","branches_url":"https://api.github.com/repos/tlswg/tls13-spec/branches{/branch}","tags_url":"https://api.github.com/repos/tlswg/tls13-spec/tags","blobs_url":"https://api.github.com/repos/tlswg/tls13-spec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tlswg/tls13-spec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tlswg/tls13-spec/git/refs{/sha}","trees_url":"https://api.github.com/repos/tlswg/tls13-spec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tlswg/tls13-spec/statuses/{sha}","languages_url":"https://api.github.com/repos/tlswg/tls13-spec/languages","stargazers_url":"https://api.github.com/repos/tlswg/tls13-spec/stargazers","contributors_url":"https://api.github.com/repos/tlswg/tls13-spec/contributors","subscribers_url":"https://api.github.com/repos/tlswg/tls13-spec/subscribers","subscription_url":"https://api.github.com/repos/tlswg/tls13-spec/subscription","commits_url":"https://api.github.com/repos/tlswg/tls13-spec/commits{/sha}","git_commits_url":"https://api.github.com/repos/tlswg/tls13-spec/git/commits{/sha}","comments_url":"https://api.github.com/repos/tlswg/tls13-spec/comments{/number}","issue_comment_url":"https://api.github.com/repos/tlswg/tls13-spec/issues/comments{/number}","contents_url":"https://api.github.com/repos/tlswg/tls13-spec/contents/{+path}","compare_url":"https://api.github.com/repos/tlswg/tls13-spec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tlswg/tls13-spec/merges","archive_url":"https://api.github.com/repos/tlswg/tls13-spec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tlswg/tls13-spec/downloads","issues_url":"https://api.github.com/repos/tlswg/tls13-spec/issues{/number}","pulls_url":"https://api.github.com/repos/tlswg/tls13-spec/pulls{/number}","milestones_url":"https://api.github.com/repos/tlswg/tls13-spec/milestones{/number}","notifications_url":"https://api.github.com/repos/tlswg/tls13-spec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tlswg/tls13-spec/labels{/name}","releases_url":"https://api.github.com/repos/tlswg/tls13-spec/releases{/id}","deployments_url":"https://api.github.com/repos/tlswg/tls13-spec/deployments","created_at":"2014-04-17T17:52:32Z","updated_at":"2016-12-16T17:32:02Z","pushed_at":"2016-12-16T21:51:07Z","git_url":"git://github.com/tlswg/tls13-spec.git","ssh_url":"git@github.com:tlswg/tls13-spec.git","clone_url":"https://github.com/tlswg/tls13-spec.git","svn_url":"https://github.com/tlswg/tls13-spec","homepage":null,"size":5905,"stargazers_count":228,"watchers_count":228,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":107,"mirror_url":null,"open_issues_count":25,"forks":107,"open_issues":25,"watchers":228,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822"},"html":{"href":"https://github.com/tlswg/tls13-spec/pull/822"},"issue":{"href":"https://api.github.com/repos/tlswg/tls13-spec/issues/822"},"comments":{"href":"https://api.github.com/repos/tlswg/tls13-spec/issues/822/comments"},"review_comments":{"href":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822/comments"},"review_comment":{"href":"https://api.github.com/repos/tlswg/tls13-spec/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tlswg/tls13-spec/pulls/822/commits"},"statuses":{"href":"https://api.github.com/repos/tlswg/tls13-spec/statuses/6b88d694a9a5c5aca0cbd921ce81f6b69019e961"}}}}
{"actor":{"display_login":"davidben"}}