2022-01-12 15:05:25 +01:00
|
|
|
# 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:
|
|
|
|
|
2022-01-12 15:09:00 +01:00
|
|
|
![web_wallet_authentication](../images/webwallet_authentication.svg)
|
2022-01-12 15:05:25 +01:00
|
|
|
|
|
|
|
```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:
|
|
|
|
-->
|