mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-09-08 11:42:15 -04:00
Add passkey operations to security diagram
This commit is contained in:
6 files changed
+156
-201
No files matched your search
+1
-1
File diff suppressed because one or more lines are too long.
|
Before Width: | Height: | Size: 1024 KiB After Width: | Height: | Size: 1.0 MiB |
+1
-2
File diff suppressed because one or more lines are too long.
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1014 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 100 KiB |
+153
-79
@@ -1,6 +1,6 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram name="Page-1" id="ykhTdbPCDOXpVAqZYsCj">
|
||||
<mxGraphModel dx="1091" dy="716" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" math="0" shadow="0">
|
||||
<mxGraphModel dx="1589" dy="716" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
@@ -36,10 +36,10 @@
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-15" value="AliasVault Client (Web / Browser / Mobile)" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="52" width="1340" height="470" as="geometry"/>
|
||||
<mxGeometry x="40" y="30" width="1390" height="492" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-63" value="Vault operations" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="526.84" y="82" width="160" height="320" as="geometry"/>
|
||||
<mxGeometry x="490.00000000000006" y="82" width="160" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-32" value="AliasVault Server (REST API)" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="652" width="1340" height="390" as="geometry"/>
|
||||
@@ -98,33 +98,33 @@
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-27" value="AES256-GCM" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="554" y="222" width="110" height="40" as="geometry"/>
|
||||
<mxGeometry x="517.16" y="222" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-26" value="SRP client" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="164" y="453" width="110" height="40" as="geometry"/>
|
||||
<mxGeometry x="137" y="453" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-60" value="Key derivation and server authentication" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="95" y="82" width="250" height="320" as="geometry"/>
|
||||
<mxGeometry x="70" y="82" width="250" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-16" value="Master Password <br>(not persisted)" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="145" y="172" width="150" height="50" as="geometry"/>
|
||||
<mxGeometry x="120" y="172" width="150" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-20" value="Argon2Id" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="165" y="247" width="110" height="40" as="geometry"/>
|
||||
<mxGeometry x="140" y="247" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-22" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-16" target="6F2B19X3ZkVbRV3rCgbW-20" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="405" y="282" as="sourcePoint"/>
|
||||
<mxPoint x="455" y="232" as="targetPoint"/>
|
||||
<mxPoint x="380" y="282" as="sourcePoint"/>
|
||||
<mxPoint x="430" y="232" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-23" value="Derived Key <br>(stored in app memory)" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="144" y="320" width="150" height="50" as="geometry"/>
|
||||
<mxGeometry x="119" y="320" width="150" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-24" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-20" target="6F2B19X3ZkVbRV3rCgbW-23" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="405" y="282" as="sourcePoint"/>
|
||||
<mxPoint x="455" y="232" as="targetPoint"/>
|
||||
<mxPoint x="380" y="282" as="sourcePoint"/>
|
||||
<mxPoint x="430" y="232" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-28" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-23" target="6F2B19X3ZkVbRV3rCgbW-26" edge="1">
|
||||
@@ -142,40 +142,119 @@
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-66" value="SRP salt/verifier" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="144" y="559" width="150" height="48" as="geometry"/>
|
||||
<mxGeometry x="117" y="568" width="150" height="48" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-72" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-68" target="6F2B19X3ZkVbRV3rCgbW-27" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="609" y="392"/>
|
||||
<mxPoint x="609" y="392"/>
|
||||
<mxPoint x="572.16" y="330"/>
|
||||
<mxPoint x="572.16" y="330"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-180" value="Decrypt with<br>derived key" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="6F2B19X3ZkVbRV3rCgbW-72" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.6371" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset"/>
|
||||
<mxPoint x="-1" y="18" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-68" value="Retrieve encrypted vault" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" parent="1" vertex="1">
|
||||
<mxGeometry x="549" y="330" width="120" height="40" as="geometry"/>
|
||||
<mxGeometry x="512.16" y="330" width="120" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-47" value="Server storage" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;container=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="540" y="682.65" width="140" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-70" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-56" target="6F2B19X3ZkVbRV3rCgbW-68" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-70" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.541;entryY=1.003;entryDx=0;entryDy=0;entryPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-56" target="6F2B19X3ZkVbRV3rCgbW-68" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="611" y="490"/>
|
||||
<mxPoint x="577" y="490"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-181" value="Retrieve vault <br>from server" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="6F2B19X3ZkVbRV3rCgbW-70" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.2454" y="1" relative="1" as="geometry">
|
||||
<mxPoint y="-26" as="offset"/>
|
||||
<mxPoint x="-19" y="-31" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-56" value="Encrypted Vault(s)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;container=0;" parent="1" vertex="1">
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-56" value="Encrypted vault(s)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;container=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="556" y="712.65" width="110" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="16" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=3;startArrow=none;startFill=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=oval;endFill=1;" edge="1" parent="1" source="passkey-operations-box" target="6F2B19X3ZkVbRV3rCgbW-166">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="560" y="82" as="targetPoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="1285" y="60"/>
|
||||
<mxPoint x="406" y="60"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="21" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=3;startArrow=none;startFill=0;endArrow=oval;endFill=1;" edge="1" parent="1" source="passkey-operations-box">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1280" y="60" as="targetPoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="1285" y="60"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-operations-box" value="Passkey operations" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="1170" y="82" width="230" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-create-style" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="passkey-keygen" target="passkey-private-key" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-public-style" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="passkey-keygen" target="passkey-public-key" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-keygen" value="WebAuthn key generation (RSA-2048/ES256)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="1210" y="112" width="150" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="passkey-public-key" target="10">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="On create" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="11">
|
||||
<mxGeometry x="0.1385" y="2" relative="1" as="geometry">
|
||||
<mxPoint x="-10" y="2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-public-key" value="Passkey <br>Public Key" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="1285" y="202" width="105" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-private-key" value="Passkey <br>Private Key" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="1175" y="202" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="passkey-sign" target="10">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1450" y="292"/>
|
||||
<mxPoint x="1450" y="240"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="On login" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="13">
|
||||
<mxGeometry x="0.2035" y="2" relative="1" as="geometry">
|
||||
<mxPoint x="-38" y="18" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-sign" value="WebAuthn sign challenge" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="1210" y="272" width="150" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-retrieve" value="Retrieve passkey from vault" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" parent="1" vertex="1">
|
||||
<mxGeometry x="1210" y="332" width="150" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-auth-edge" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;" parent="1" source="passkey-retrieve" target="passkey-sign" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="passkey-priv-to-sign" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;dashed=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="passkey-private-key" target="passkey-sign" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1235" y="260" as="targetPoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="1230" y="260"/>
|
||||
<mxPoint x="1285" y="260"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-76" value="Claiming new email address" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="720" y="82" width="250" height="320" as="geometry"/>
|
||||
<mxGeometry x="670" y="82" width="250" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-83" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-77" target="6F2B19X3ZkVbRV3rCgbW-79" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
@@ -183,14 +262,19 @@
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-100" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-77" target="6F2B19X3ZkVbRV3rCgbW-78" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-77" value="RSA/OAEP Key Generation" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="790" y="122" width="110" height="40" as="geometry"/>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-77" value="RSA/OAEP key generation" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="740" y="122" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-78" value="Public key" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="740" y="207" width="100" height="40" as="geometry"/>
|
||||
<mxGeometry x="680" y="207" width="100" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="22" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;strokeWidth=3;startArrow=none;startFill=0;endArrow=oval;endFill=1;" edge="1" parent="1" source="6F2B19X3ZkVbRV3rCgbW-79">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="882.2592592592591" y="60" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-79" value="Private key" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="850" y="207" width="110" height="40" as="geometry"/>
|
||||
<mxGeometry x="800" y="207" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-86" value="" style="group;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;" parent="1" vertex="1" connectable="0">
|
||||
<mxGeometry x="870" y="687" width="490" height="320" as="geometry"/>
|
||||
@@ -248,19 +332,17 @@
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-101" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-78" target="6F2B19X3ZkVbRV3rCgbW-99" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="790" y="292"/>
|
||||
<mxPoint x="750" y="292"/>
|
||||
<mxPoint x="750" y="883"/>
|
||||
<mxPoint x="730" y="883"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-102" value="Save in server <br>public key store" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="6F2B19X3ZkVbRV3rCgbW-101" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.4464" y="-2" relative="1" as="geometry">
|
||||
<mxPoint x="-8" y="-286" as="offset"/>
|
||||
<mxPoint x="2" y="-312" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-103" value="Register new email<br>claim" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" parent="1" vertex="1">
|
||||
<mxGeometry x="781" y="332" width="120" height="40" as="geometry"/>
|
||||
<mxGeometry x="750" y="320" width="120" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-140" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-99" target="6F2B19X3ZkVbRV3rCgbW-124" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
@@ -290,19 +372,18 @@
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-107" value="External email received from internet" style="shape=message;html=1;html=1;outlineConnect=0;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="1186.3899999999999" y="1058" width="60" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-106" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" edge="1">
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-106" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1" source="6F2B19X3ZkVbRV3rCgbW-103">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="830" y="372" as="sourcePoint"/>
|
||||
<mxPoint x="1110" y="370" as="sourcePoint"/>
|
||||
<mxPoint x="665" y="942" as="targetPoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="830" y="372"/>
|
||||
<mxPoint x="830" y="942"/>
|
||||
<mxPoint x="810" y="942"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-152" value="Register email claim<br>on server" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="6F2B19X3ZkVbRV3rCgbW-106" vertex="1" connectable="0">
|
||||
<mxGeometry x="-0.3735" relative="1" as="geometry">
|
||||
<mxPoint x="20" y="-132" as="offset"/>
|
||||
<mxPoint x="175" y="-129" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-123" value="Encrypted email(s)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;strokeColor=#006EAF;fontColor=#ffffff;" parent="1" vertex="1">
|
||||
@@ -322,7 +403,7 @@
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-136" value="Email retrieval and decryption" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" parent="1" vertex="1">
|
||||
<mxGeometry x="996.3900000000001" y="82" width="250" height="320" as="geometry"/>
|
||||
<mxGeometry x="940" y="82" width="209" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-145" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-143" target="6F2B19X3ZkVbRV3rCgbW-144" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
@@ -333,24 +414,24 @@
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-143" value="Retrieve encrypted email" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" parent="1" vertex="1">
|
||||
<mxGeometry x="1061.39" y="330" width="120" height="40" as="geometry"/>
|
||||
<mxGeometry x="984" y="330" width="120" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-148" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-144" target="6F2B19X3ZkVbRV3rCgbW-162" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1121.39" y="322" as="targetPoint"/>
|
||||
<mxPoint x="1044" y="322" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-144" value="AES256-GCM" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" parent="1" vertex="1">
|
||||
<mxGeometry x="1066.39" y="232" width="110" height="40" as="geometry"/>
|
||||
<mxGeometry x="989" y="207" width="110" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-150" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-123" edge="1">
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-150" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-123" edge="1" target="6F2B19X3ZkVbRV3rCgbW-143">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1121" y="370" as="targetPoint"/>
|
||||
<mxPoint x="1381" y="370" as="targetPoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="672" y="823"/>
|
||||
<mxPoint x="920" y="822"/>
|
||||
<mxPoint x="920" y="482"/>
|
||||
<mxPoint x="1120" y="482"/>
|
||||
<mxPoint x="1070" y="482"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
@@ -369,87 +450,80 @@
|
||||
<mxGeometry x="93" y="1088" width="170" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-162" value="Decrypted email" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="1056.39" y="122" width="130" height="40" as="geometry"/>
|
||||
<mxGeometry x="979" y="122" width="130" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-58" value="JWT token for <br>authenticating<br>with REST API" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="364" y="559" width="155" height="48" as="geometry"/>
|
||||
<mxGeometry x="328.5" y="561" width="155" height="48" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-165" value="Client local storage" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;container=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="370" y="82" width="140" height="320" as="geometry"/>
|
||||
<mxGeometry x="335" y="200" width="140" height="202" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-166" value="Decrypted vault<br>(app memory)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;container=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="112" width="110" height="80" as="geometry"/>
|
||||
<mxGeometry x="351" y="94" width="110" height="68" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-167" value="JWT Token<br>(app local storage)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;strokeColor=#006EAF;fontColor=#ffffff;" parent="1" vertex="1">
|
||||
<mxGeometry x="383" y="312" width="116" height="50" as="geometry"/>
|
||||
<mxGeometry x="348" y="312" width="116" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="4" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;" edge="1" parent="1" source="6F2B19X3ZkVbRV3rCgbW-169" target="6F2B19X3ZkVbRV3rCgbW-27">
|
||||
<mxCell id="4" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-169" target="6F2B19X3ZkVbRV3rCgbW-27" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-169" value="Derived Key<br>(app<span style="background-color: initial;">&nbsp;memory)</span>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1ba1e2;strokeColor=#006EAF;fontColor=#ffffff;" parent="1" vertex="1">
|
||||
<mxGeometry x="383" y="242" width="116" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-84" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-79" target="6F2B19X3ZkVbRV3rCgbW-166" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="630" y="222" as="targetPoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="933" y="110"/>
|
||||
<mxPoint x="752" y="110"/>
|
||||
<mxPoint x="752" y="152"/>
|
||||
</Array>
|
||||
<mxPoint x="943" y="210" as="sourcePoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-85" value="Stored in vault" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="6F2B19X3ZkVbRV3rCgbW-84" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.3345" y="3" relative="1" as="geometry">
|
||||
<mxPoint x="7" y="-3" as="offset"/>
|
||||
</mxGeometry>
|
||||
<mxGeometry x="348" y="242" width="116" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-170" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="6F2B19X3ZkVbRV3rCgbW-169" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="280" y="342" as="sourcePoint"/>
|
||||
<mxPoint x="255" y="342" as="sourcePoint"/>
|
||||
<Array as="points">
|
||||
<mxPoint x="320" y="342"/>
|
||||
<mxPoint x="320" y="267"/>
|
||||
<mxPoint x="295" y="342"/>
|
||||
<mxPoint x="295" y="267"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-173" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-58" target="6F2B19X3ZkVbRV3rCgbW-167" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-174" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-39" target="6F2B19X3ZkVbRV3rCgbW-58" edge="1">
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-174" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-39" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="942"/>
|
||||
<mxPoint x="500" y="632"/>
|
||||
<mxPoint x="442" y="632"/>
|
||||
<mxPoint x="406" y="632"/>
|
||||
</Array>
|
||||
<mxPoint x="406" y="609" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-176" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-175" target="6F2B19X3ZkVbRV3rCgbW-16" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-175" value="User login" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#a0522d;fontColor=#ffffff;strokeColor=#6D1F00;" parent="1" vertex="1">
|
||||
<mxGeometry x="162" y="112" width="120" height="40" as="geometry"/>
|
||||
<mxGeometry x="137" y="112" width="120" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-178" value="<span style="">JWT token protected API endpoints</span>" style="shape=corner;whiteSpace=wrap;html=1;fontColor=default;fillColor=#e3c800;strokeColor=#B09500;" parent="1" vertex="1">
|
||||
<mxGeometry x="567" y="552" width="803" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-179" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-27" target="6F2B19X3ZkVbRV3rCgbW-166" edge="1">
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-179" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-27" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="609" y="212"/>
|
||||
<mxPoint x="435" y="212"/>
|
||||
<mxPoint x="572" y="128"/>
|
||||
</Array>
|
||||
<mxPoint x="460" y="128" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="6F2B19X3ZkVbRV3rCgbW-182" value="Open vault <br>in local app memory" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="6F2B19X3ZkVbRV3rCgbW-179" vertex="1" connectable="0">
|
||||
<mxGeometry x="-0.4412" y="1" relative="1" as="geometry">
|
||||
<mxPoint x="28" y="-21" as="offset"/>
|
||||
<mxPoint x="1" y="-2" as="offset"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="3" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;dashed=1;" edge="1" parent="1" source="6F2B19X3ZkVbRV3rCgbW-79" target="6F2B19X3ZkVbRV3rCgbW-144">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
<mxCell id="3" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;dashed=1;" parent="1" source="6F2B19X3ZkVbRV3rCgbW-79" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="990" y="227"/>
|
||||
</Array>
|
||||
<mxPoint x="990" y="227" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="Passkey create /<br>login request<br>from remote website" style="shape=mxgraph.signs.tech.computer;html=1;pointerEvents=1;fillColor=none;strokeColor=default;verticalLabelPosition=bottom;verticalAlign=top;align=center;sketch=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="1490" y="193" width="60" height="58" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
|
||||
File diff suppressed because one or more lines are too long.
@@ -1,118 +0,0 @@
|
||||
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
|
||||
graph TB
|
||||
%% Legend
|
||||
subgraph Legend["Legend"]
|
||||
L_CRYPTO["Cryptographic Operations"]
|
||||
L_STORAGE["Storage Elements"]
|
||||
L_KEY["Keys and Sensitive Data"]
|
||||
L_PROCESS["Process Steps"]
|
||||
L_AUTH["Authentication Steps"]
|
||||
L_FLOW["Email Processing Flow"]
|
||||
end
|
||||
|
||||
subgraph Client["Client (Local Only Operations)"]
|
||||
direction TB
|
||||
MP[/"Master Password\n(never leaves client)"/]
|
||||
|
||||
subgraph KD["1. Key Derivation"]
|
||||
A2["Argon2id"]
|
||||
DK[/"Derived Key"/]
|
||||
MP --> A2
|
||||
A2 --> DK
|
||||
DK --> |"used for vault\nencryption/decryption"| AES
|
||||
DK --> |"used for authentication"| SRP_C
|
||||
end
|
||||
|
||||
subgraph VE["3. Vault Operations"]
|
||||
AES["AES256-GCM"]
|
||||
VAULT["Encrypted Vault Contents"]
|
||||
AES --> |"encrypt/decrypt"| VAULT
|
||||
end
|
||||
|
||||
subgraph KP["4. Email Key Management"]
|
||||
RSA["RSA/OAEP Key Generation"]
|
||||
PRK[/"Private Key\n(stored in vault)"/]
|
||||
PBK[/"Public Key"/]
|
||||
RSA --> |"generates pair"| PRK
|
||||
RSA --> |"generates pair"| PBK
|
||||
end
|
||||
|
||||
subgraph ED["5. Email Decryption"]
|
||||
PRK --> |"decrypt symmetric key"| SK[/"Symmetric Key\n(AES256)"/]
|
||||
SK --> |"decrypt email"| DC["Decrypted Email"]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph Server["Server"]
|
||||
direction TB
|
||||
|
||||
subgraph AUTH["Authentication Flow"]
|
||||
SRP_S["SRP Verification"]
|
||||
subgraph FA["2FA (Optional)"]
|
||||
TOTP["Time-based OTP"]
|
||||
GA["Google Authenticator\nor Compatible App"]
|
||||
VERIFY["Verify OTP Code"]
|
||||
GA --> |"generate code"| TOTP
|
||||
TOTP --> |"user enters"| VERIFY
|
||||
end
|
||||
JWT["Issue JWT Token"]
|
||||
SRP_S --> FA
|
||||
FA --> |"if 2FA enabled"| JWT
|
||||
SRP_S --> |"if 2FA disabled"| JWT
|
||||
end
|
||||
|
||||
subgraph VS["Vault Storage"]
|
||||
EV["Encrypted Vault Data"]
|
||||
end
|
||||
|
||||
subgraph ES["Email System"]
|
||||
EC["Email Claims"]
|
||||
PKS["Public Key Store"]
|
||||
|
||||
subgraph EP["Email Processing"]
|
||||
CHECK{"Valid\nEmail Claim?"}
|
||||
REJECT["Reject Email"]
|
||||
ESK[/"Generate Random\nSymmetric Key"/]
|
||||
EE["Encrypt Email\nContent"]
|
||||
ESP["Encrypt Symmetric Key\nwith Public Key"]
|
||||
EST["Store Encrypted Email\n& Encrypted Sym Key"]
|
||||
|
||||
CHECK --> |"No"| REJECT
|
||||
CHECK --> |"Yes"| ESK
|
||||
ESK --> EE
|
||||
ESK --> ESP
|
||||
EE --> EST
|
||||
ESP --> EST
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
%% Client-Server Interactions
|
||||
SRP_C["SRP Client"] <--> |"SRP Authentication"| SRP_S
|
||||
AES <--> |"encrypted vault transfer"| EV
|
||||
PBK --> |"register"| PKS
|
||||
EST --> |"retrieve encrypted\nemail & sym key"| ED
|
||||
|
||||
%% Styling
|
||||
classDef process fill:#ddd,stroke:#333,stroke-width:2px
|
||||
classDef storage fill:#b7e3fc,stroke:#333,stroke-width:2px
|
||||
classDef key fill:#fef08a,stroke:#333,stroke-width:2px
|
||||
classDef crypto fill:#e9d5ff,stroke:#333,stroke-width:2px
|
||||
classDef auth fill:#86efac,stroke:#333,stroke-width:2px
|
||||
classDef flow fill:#fca5a5,stroke:#333,stroke-width:2px
|
||||
|
||||
%% Apply styles to legend
|
||||
class L_CRYPTO crypto
|
||||
class L_STORAGE storage
|
||||
class L_KEY key
|
||||
class L_PROCESS process
|
||||
class L_AUTH auth
|
||||
class L_FLOW flow
|
||||
|
||||
%% Apply styles to elements
|
||||
class A2,SRP_C,SRP_S,RSA,AES crypto
|
||||
class EV,EST storage
|
||||
class MP,DK,PRK,PBK,SK,ESK key
|
||||
class KD,VE,KP,ED process
|
||||
class SRP_S,FA,JWT,TOTP,VERIFY auth
|
||||
class CHECK,EP flow
|
||||
Reference in new issue
Block a user