207 lines
3.9 KiB
Markdown
207 lines
3.9 KiB
Markdown
|
# Web Wallet Authentication
|
||
|
|
||
|
<!--
|
||
|
valid status values are: Pre-draft|Draft|Proposal|Accepted
|
||
|
-->
|
||
|
|
||
|
- Authors: William Luke <williamluke4@gmail.com> (grassecon.org)
|
||
|
- Date: 2022.01.12
|
||
|
- Version: 1
|
||
|
- Status: Pre-draft
|
||
|
|
||
|
## Rationale
|
||
|
|
||
|
## Intro
|
||
|
|
||
|
## User Flow:
|
||
|
|
||
|
![web_wallet_authentication](./images/web_wallet_authentication.svg)
|
||
|
|
||
|
```dot
|
||
|
digraph G {
|
||
|
node [fontname = "Handlee"];
|
||
|
edge [fontname = "Handlee"];
|
||
|
|
||
|
splines=true;
|
||
|
subgraph cluster_0 {
|
||
|
label = "Create Account";
|
||
|
color=black
|
||
|
node [style=filled,color=lightgray];
|
||
|
create [
|
||
|
label = "Create Account";
|
||
|
shape = rect;
|
||
|
];
|
||
|
create -> trusted
|
||
|
trusted [
|
||
|
label = "Are you on a trusted device";
|
||
|
shape = diamond;
|
||
|
];
|
||
|
|
||
|
trusted -> password [ label = "Yes"];
|
||
|
trusted -> are_you_sure [ label = "No" ];
|
||
|
|
||
|
are_you_sure [
|
||
|
label = "Are you sure you want to continue";
|
||
|
shape = diamond;
|
||
|
];
|
||
|
|
||
|
are_you_sure -> password [ label = "Yes"];
|
||
|
|
||
|
password [
|
||
|
label = "Create new Account";
|
||
|
shape = rect;
|
||
|
];
|
||
|
password -> generate_key_pair
|
||
|
generate_key_pair [
|
||
|
label = "Generate Device Key Pair";
|
||
|
shape = rect;
|
||
|
];
|
||
|
seed [
|
||
|
label = "Seed";
|
||
|
shape = rect;
|
||
|
];
|
||
|
seed -> generate_key_pair
|
||
|
generate_key_pair -> verify_key_copied
|
||
|
|
||
|
verify_key_copied [
|
||
|
label = "Verify Seed Copied";
|
||
|
shape = rect;
|
||
|
];
|
||
|
|
||
|
verify_key_copied -> store_key_pair
|
||
|
|
||
|
store_key_pair [
|
||
|
label = "Store Encrypted Device Key Pair";
|
||
|
shape = rect;
|
||
|
];
|
||
|
|
||
|
store_key_pair -> export_key
|
||
|
|
||
|
export_key [
|
||
|
label = "Do you want to save to USB/local?";
|
||
|
shape = diamond;
|
||
|
];
|
||
|
|
||
|
export_key -> select_export_location [ label = "Yes"];
|
||
|
export_key -> create_account [ label = "No"];
|
||
|
select_export_location [
|
||
|
label = "Select Export Location";
|
||
|
shape = rect;
|
||
|
]
|
||
|
select_export_location -> create_account
|
||
|
create_account [
|
||
|
label = "Create account and associate with device key pair";
|
||
|
shape = rect;
|
||
|
];
|
||
|
create_account -> share_endorsement_url
|
||
|
share_endorsement_url [
|
||
|
label = "Share Endorsement URL with Endorsers";
|
||
|
shape = rect;
|
||
|
];
|
||
|
}
|
||
|
subgraph cluster_1 {
|
||
|
label = "Sign In";
|
||
|
color=black
|
||
|
node [style=filled,color=lightgray];
|
||
|
select_profile [
|
||
|
label = "Select Profile";
|
||
|
shape = rect;
|
||
|
];
|
||
|
upload_key [
|
||
|
label = "Upload Key";
|
||
|
shape = rect;
|
||
|
];
|
||
|
select_profile -> enter_password
|
||
|
upload_key -> enter_password
|
||
|
enter_password [
|
||
|
label = "Enter Password";
|
||
|
shape = rect;
|
||
|
];
|
||
|
link_account [
|
||
|
label = "Link Account";
|
||
|
shape = rect;
|
||
|
];
|
||
|
link_account -> enter_phone_number
|
||
|
enter_phone_number [
|
||
|
label = "Enter Phone Number";
|
||
|
shape = rect;
|
||
|
];
|
||
|
enter_phone_number -> send_otp
|
||
|
send_otp [
|
||
|
label = "Send OTP";
|
||
|
shape = rect;
|
||
|
];
|
||
|
send_otp -> enter_pin
|
||
|
|
||
|
enter_pin [
|
||
|
label = "Enter Pin";
|
||
|
shape = rect;
|
||
|
];
|
||
|
enter_pin -> create_account_flow
|
||
|
|
||
|
create_account_flow [
|
||
|
label = "Create Account Flow";
|
||
|
shape = rect;
|
||
|
];
|
||
|
|
||
|
}
|
||
|
|
||
|
subgraph cluster_2 {
|
||
|
label = "Endorse";
|
||
|
color=black
|
||
|
node [style=filled,color=lightgray];
|
||
|
|
||
|
open_link [
|
||
|
label = "Open Link";
|
||
|
shape = rect;
|
||
|
];
|
||
|
open_link -> sign_in
|
||
|
sign_in [
|
||
|
label = "Sign In";
|
||
|
shape = rect;
|
||
|
];
|
||
|
sign_in -> custodial
|
||
|
custodial [
|
||
|
label = "Custodial";
|
||
|
shape = diamond;
|
||
|
];
|
||
|
custodial -> ask_server [label="Yes"]
|
||
|
custodial -> okota_tx [label="No"]
|
||
|
ask_server -> okota_tx
|
||
|
ask_server [
|
||
|
label = "Ask Server to Sign";
|
||
|
shape = rect;
|
||
|
];
|
||
|
okota_tx [
|
||
|
label = "Sign In";
|
||
|
shape = rect;
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Example:
|
||
|
|
||
|
## Testing
|
||
|
|
||
|
## Action items
|
||
|
|
||
|
## Implementation
|
||
|
|
||
|
### Workflow
|
||
|
|
||
|
### Variables
|
||
|
|
||
|
### Interface
|
||
|
|
||
|
## Security
|
||
|
|
||
|
## Changelog
|
||
|
|
||
|
<!--
|
||
|
Please remember to describe every change to this document in the changelog using
|
||
|
serial number:
|
||
|
|
||
|
* version 1:
|
||
|
-->
|