@@ -7,6 +7,7 @@ Status: CG-DRAFT
7
7
Group : WICG
8
8
URL : https://wicg.github.io/dbsc/
9
9
Editor : Kristian Monsen 76841, Google, [email protected]
10
+ Editor : Daniel Rubery, Google, [email protected]
10
11
Abstract : The Device Bound Sessions Credentials (DBSC) aims to prevent hijacking via cookie theft by building a protocol and infrastructure that allows a user agent to assert possession of a securely-stored private key. DBSC is a Web API and a protocol between user agents and servers to achieve this binding.
11
12
Repository : https://github.com/WICG/dbsc/
12
13
Markup Shorthands : css no, markdown yes
@@ -43,14 +44,14 @@ spec: RFC8941;urlPrefix:https://datatracker.ietf.org/doc/html/rfc8941#;type:dfn
43
44
<em> This section is not normative.</em><br/>
44
45
<em> Note this is a very early drafting for writing collaboration only</em>
45
46
46
- The web is built on a stateless protocol, to provide required functionality Web
47
- applications store data locally on a user's computer in order to provide
48
- functionality the are very common today. Primarily this is used for logged in
47
+ The web is built on a stateless protocol. To provide required functionality, Web
48
+ applications store data locally on a user's computer. This is used for logged in
49
49
user sessions that can last for a long time.
50
50
51
- In general user agents do not have a secure way of storing files supporting
52
- these activities across commonly used operating systems, and actions may have
53
- serious consequences, for example transferring money from a bank account.
51
+ In general user agents do not have a secure way of storing data supporting these
52
+ activities across commonly used operating systems, and actions authenticated by
53
+ this data may have serious consequences, for example transferring money from a
54
+ bank account.
54
55
55
56
This document defines a new API, Device Bound Sessions Credentials (DBSC), that
56
57
enables the server to verify that a session cannot be exported from a device by
@@ -68,25 +69,25 @@ different situations. Some of the use cases of DBSC are:
68
69
69
70
### Signed in session ### {#example-signin}
70
71
<div class="example" id="signin-example">
71
- A user logs in to his social account, to protect the user's private data the
72
+ A user logs in to his social account. To protect the user's private data the
72
73
site protects his logged in session wwith a DBSC session. If the user tries to
73
- log with the same cookie file on a different device, the site can detect and
74
- refuse this as an unathorized user.
74
+ log in with the same cookie file on a different device, the site can detect and
75
+ refuse this as an unauthorized user.
75
76
</div>
76
77
77
78
### Device integrity ### {#example-device-integrity}
78
79
<div class="example" id="device-integrity-example">
79
- A commercial site has different ways of detecting unahtorized log-in attempts.
80
- A DBSC session on device could be used to see which users has logged on to
80
+ A commercial site has different ways of detecting unauthorized login attempts.
81
+ A DBSC session on device could be used to see which users have logged on to
81
82
this device before.
82
83
</div>
83
84
84
85
### Device reputation ### {#example-device-reputation}
85
86
<div class="example" id="device-reputation-example">
86
- A payment company hosted at site `payment.example` could create a session bound
87
- to when users visit commercial site `shopping.example`. It could track the
88
- reliability of the device over time to decide how likely a transaction is
89
- legitimate.
87
+ A payment company hosted at site `payment.example.com ` could create a session
88
+ bound to when users visit commercial site `shopping.example.com `. It could
89
+ track the reliability of the device over time to decide how likely a
90
+ transaction is legitimate.
90
91
</div>
91
92
92
93
# Security Considerations # {#privacy}
@@ -104,7 +105,7 @@ session was registered to a secure device.
104
105
105
106
## Non-goals ## {#non-goals}
106
107
DBSC will not prevent temporary access to the browser session while the attacker
107
- is resident on the user's device. The private key should be stored as safe as
108
+ is resident on the user's device. The private key should be stored as safely as
108
109
modern operating systems allow, preventing exfiltration of the session private
109
110
key, but the signing capability will still be available for any program running
110
111
as the user on the user's device.
@@ -180,7 +181,7 @@ This document depends on the Infra Standard for a number of foundational
180
181
concepts used in its algorithms and prose [[!INFRA]] .
181
182
182
183
## Sessions by registrable domain ## {#framework-sessions-origin}
183
- A <dfn>registrable domain sessions </dfn> is a [=ordered map=] from
184
+ A <dfn>sessions by registrable domain</dfn> is an [=ordered map=] from
184
185
[=host/registrable domain=] to [=session by id=] .
185
186
186
187
## Sessions by id ## {#framework-sessions-id}
@@ -193,16 +194,16 @@ A <dfn>device bound session</dfn> is a [=struct=] with the following
193
194
[=struct/items=] :
194
195
<dl dfn-for="device bound session">
195
196
: <dfn>session identifier</dfn>
196
- :: an [=string=] that is a unique identifier of a session on an
197
+ :: a [=string=] that is a unique identifier of a session on an
197
198
[=host/registrable domain=]
198
199
: <dfn>refresh url</dfn>
199
- :: an [=string=] that is representing the [=url=] to be used to refresh the
200
+ :: a [=string=] that is representing the [=url=] to be used to refresh the
200
201
session
201
202
: <dfn>defer requests</dfn>
202
203
:: an OPTIONAL [=boolean=] defining if the browser should defer other
203
204
requests while refreshing a session
204
205
: <dfn>cached challenge</dfn>
205
- :: an [=string=] that is to be used as the next challenge for this session
206
+ :: a [=string=] that is to be used as the next challenge for this session
206
207
: [=session scope=]
207
208
:: a [=struct=] defining which [=url=] 's' are in scope for this session
208
209
: [=session credential=]
@@ -255,7 +256,7 @@ The <dfn>session credential</dfn> is a [=struct=] with the following
255
256
null if no such session exists.
256
257
257
258
1. Let |site| be the [=host/registrable domain=] of the [=url=]
258
- 1. Let |domain sessions| be [=registrable domain sessions =] [|site|] as a
259
+ 1. Let |domain sessions| be [=sessions by registrable domain=] [|site|] as a
259
260
[=/session by id=]
260
261
1. Return |domain sessions|[|session identifier|]
261
262
</div>
@@ -266,9 +267,9 @@ The <dfn>session credential</dfn> is a [=struct=] with the following
266
267
<dfn export dfn-for="algorithms">process a challenge</dfn> received in an HTTP
267
268
header.
268
269
269
- Given a [=response=] (|response|), a [=registrable domain sessions =] , this
270
+ Given a [=response=] (|response|) and a [=sessions by registrable domain=] , this
270
271
algorithm updates the [=device bound session/cached challenge=] for a
271
- [=device bound session=] , or immediatly resends the [=DBSC proof=] signed with
272
+ [=device bound session=] , or immediately resends the [=DBSC proof=] signed with
272
273
the new challenge if the [=response/status=] is 401.
273
274
274
275
1. Let |header name| be "<code> Sec-Session-Challenge</code> ".
@@ -392,7 +393,8 @@ The \`<dfn export http-header id="sec-session-challenge-header">
392
393
<code>Sec-Session-Challenge</code></dfn> \` header field can be used in a
393
394
[=response=] by the server to send a challenge to the client that it expects to
394
395
be used in future Sec-Session-Response headers inside the [=DBSC proof=] , or to
395
- request a newly signed [=DBSC proof=] right away if the
396
+ request a newly signed [=DBSC proof=] right away if the [=response/status=] is
397
+ 401.
396
398
397
399
[:Sec-Session-Challenge:] is a structured header. Its value must be a string.
398
400
Its ABNF is: <pre class="abnf"> SecSessionChallenge = <a>sf-string</a> </pre>
0 commit comments