32 lines
No EOL
15 KiB
XML
32 lines
No EOL
15 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="788px" preserveAspectRatio="none" style="width:631px;height:788px;background:#FFFFFF;" version="1.1" viewBox="0 0 631 788" width="631px" zoomAndPan="magnify"><defs><filter height="300%" id="fg7g4phj2jljb" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="566.9922" style="stroke:#A80036;stroke-width:1.0;" width="10" x="158.5" y="119.4297"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="156.5625"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="299.0938"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="383.3594"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="467.625"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="551.8906"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="488.5" y="232.8281"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="576" y="628.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="23" x2="23" y1="88.2969" y2="704.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="163" x2="163" y1="88.2969" y2="704.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="493" x2="493" y1="88.2969" y2="704.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="581" x2="581" y1="88.2969" y2="704.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="31" x="5" y="84.9951">User</text><ellipse cx="23.5" cy="15" fill="#FEFECE" filter="url(#fg7g4phj2jljb)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M23.5,23 L23.5,50 M10.5,31 L36.5,31 M23.5,50 L10.5,65 M23.5,50 L36.5,65 " fill="none" filter="url(#fg7g4phj2jljb)" style="stroke:#A80036;stroke-width:2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="31" x="5" y="716.417">User</text><ellipse cx="23.5" cy="729.7188" fill="#FEFECE" filter="url(#fg7g4phj2jljb)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M23.5,737.7188 L23.5,764.7188 M10.5,745.7188 L36.5,745.7188 M23.5,764.7188 L10.5,779.7188 M23.5,764.7188 L36.5,779.7188 " fill="none" filter="url(#fg7g4phj2jljb)" style="stroke:#A80036;stroke-width:2.0;"/><rect fill="#FEFECE" filter="url(#fg7g4phj2jljb)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="67" x="128" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="135" y="72.9951">Backup</text><rect fill="#FEFECE" filter="url(#fg7g4phj2jljb)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="67" x="128" y="703.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="53" x="135" y="723.417">Backup</text><rect fill="#FEFECE" filter="url(#fg7g4phj2jljb)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="71" x="456" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="57" x="463" y="72.9951">Yubikey</text><rect fill="#FEFECE" filter="url(#fg7g4phj2jljb)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="71" x="456" y="703.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="57" x="463" y="723.417">Yubikey</text><rect fill="#FEFECE" filter="url(#fg7g4phj2jljb)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="76" x="541" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="548" y="72.9951">Backend</text><rect fill="#FEFECE" filter="url(#fg7g4phj2jljb)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="76" x="541" y="703.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="548" y="723.417">Backend</text><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="566.9922" style="stroke:#A80036;stroke-width:1.0;" width="10" x="158.5" y="119.4297"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="156.5625"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="299.0938"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="383.3594"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="467.625"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="40.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163.5" y="551.8906"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="488.5" y="232.8281"/><rect fill="#FFFFFF" filter="url(#fg7g4phj2jljb)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="576" y="628.1563"/><polygon fill="#A80036" points="146.5,115.4297,156.5,119.4297,146.5,123.4297,150.5,119.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="23.5" x2="152.5" y1="119.4297" y2="119.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="116" x="30.5" y="114.3638">Create Repository</text><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="215.5" y1="143.5625" y2="143.5625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="215.5" x2="215.5" y1="143.5625" y2="156.5625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="174.5" x2="215.5" y1="156.5625" y2="156.5625"/><polygon fill="#A80036" points="184.5,152.5625,174.5,156.5625,184.5,160.5625,180.5,156.5625" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="154" x="180.5" y="138.4966">generate P-256 key pair</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="215.5" y1="195.6953" y2="195.6953"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="215.5" x2="215.5" y1="195.6953" y2="208.6953"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="168.5" x2="215.5" y1="208.6953" y2="208.6953"/><polygon fill="#A80036" points="178.5,204.6953,168.5,208.6953,178.5,212.6953,174.5,208.6953" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47" x="180.5" y="190.6294">keypair</text><polygon fill="#A80036" points="476.5,228.8281,486.5,232.8281,476.5,236.8281,480.5,232.8281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="482.5" y1="232.8281" y2="232.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="223" x="175.5" y="227.7622">Read the public key of the YubiKey</text><polygon fill="#A80036" points="179.5,257.9609,169.5,261.9609,179.5,265.9609,175.5,261.9609" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="492.5" y1="261.9609" y2="261.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="64" x="185.5" y="256.895">public key</text><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="215.5" y1="286.0938" y2="286.0938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="215.5" x2="215.5" y1="286.0938" y2="299.0938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="174.5" x2="215.5" y1="299.0938" y2="299.0938"/><polygon fill="#A80036" points="184.5,295.0938,174.5,299.0938,184.5,303.0938,180.5,299.0938" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="199" x="180.5" y="281.0278">Calculate ECDHE shared secret</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="215.5" y1="338.2266" y2="338.2266"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="215.5" x2="215.5" y1="338.2266" y2="351.2266"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="168.5" x2="215.5" y1="351.2266" y2="351.2266"/><polygon fill="#A80036" points="178.5,347.2266,168.5,351.2266,178.5,355.2266,174.5,351.2266" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="88" x="180.5" y="333.1606">shared secret</text><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="215.5" y1="370.3594" y2="370.3594"/><line style="stroke:#A80036;stroke-width:1.0;" x1="215.5" x2="215.5" y1="370.3594" y2="383.3594"/><line style="stroke:#A80036;stroke-width:1.0;" x1="174.5" x2="215.5" y1="383.3594" y2="383.3594"/><polygon fill="#A80036" points="184.5,379.3594,174.5,383.3594,184.5,387.3594,180.5,383.3594" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="201" x="180.5" y="365.2935">Generate Curve 25519 key pair</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="215.5" y1="422.4922" y2="422.4922"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="215.5" x2="215.5" y1="422.4922" y2="435.4922"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="168.5" x2="215.5" y1="435.4922" y2="435.4922"/><polygon fill="#A80036" points="178.5,431.4922,168.5,435.4922,178.5,439.4922,174.5,435.4922" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47" x="180.5" y="417.4263">keypair</text><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="215.5" y1="454.625" y2="454.625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="215.5" x2="215.5" y1="454.625" y2="467.625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="174.5" x2="215.5" y1="467.625" y2="467.625"/><polygon fill="#A80036" points="184.5,463.625,174.5,467.625,184.5,471.625,180.5,467.625" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="306" x="180.5" y="449.5591">Generate encyption key from the shared secret</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="215.5" y1="506.7578" y2="506.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="215.5" x2="215.5" y1="506.7578" y2="519.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="168.5" x2="215.5" y1="519.7578" y2="519.7578"/><polygon fill="#A80036" points="178.5,515.7578,168.5,519.7578,178.5,523.7578,174.5,519.7578" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="95" x="180.5" y="501.6919">encryption key</text><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="215.5" y1="538.8906" y2="538.8906"/><line style="stroke:#A80036;stroke-width:1.0;" x1="215.5" x2="215.5" y1="538.8906" y2="551.8906"/><line style="stroke:#A80036;stroke-width:1.0;" x1="174.5" x2="215.5" y1="551.8906" y2="551.8906"/><polygon fill="#A80036" points="184.5,547.8906,174.5,551.8906,184.5,555.8906,180.5,551.8906" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="305" x="180.5" y="533.8247">Encrypt the private key with the encryption key</text><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="215.5" y1="591.0234" y2="591.0234"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="215.5" x2="215.5" y1="591.0234" y2="604.0234"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="168.5" x2="215.5" y1="604.0234" y2="604.0234"/><polygon fill="#A80036" points="178.5,600.0234,168.5,604.0234,178.5,608.0234,174.5,604.0234" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="141" x="180.5" y="585.9575">encrypted private key</text><polygon fill="#A80036" points="564,624.1563,574,628.1563,564,632.1563,568,628.1563" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="168.5" x2="570" y1="628.1563" y2="628.1563"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="300" x="175.5" y="623.0903">Store the encrypted private key and public key</text><polygon fill="#A80036" points="179.5,653.2891,169.5,657.2891,179.5,661.2891,175.5,657.2891" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="173.5" x2="580" y1="657.2891" y2="657.2891"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="51" x="185.5" y="652.2231">success</text><polygon fill="#A80036" points="34.5,682.4219,24.5,686.4219,34.5,690.4219,30.5,686.4219" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="28.5" x2="162.5" y1="686.4219" y2="686.4219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="51" x="40.5" y="681.356">success</text><!--MD5=[e93e643080f85319815da5d128b995ea]
|
|
@startuml
|
|
actor User
|
|
autoactivate on
|
|
|
|
User -> Backup : Create Repository
|
|
Backup -> Backup : generate P-256 key pair
|
|
return keypair
|
|
Backup -> Yubikey : Read the public key of the YubiKey
|
|
return public key
|
|
Backup -> Backup : Calculate ECDHE shared secret
|
|
return shared secret
|
|
Backup -> Backup : Generate Curve 25519 key pair
|
|
return keypair
|
|
Backup -> Backup : Generate encyption key from the shared secret
|
|
return encryption key
|
|
Backup -> Backup : Encrypt the private key with the encryption key
|
|
return encrypted private key
|
|
Backup -> Backend : Store the encrypted private key and public key
|
|
return success
|
|
return success
|
|
@enduml
|
|
|
|
PlantUML version 1.2022.1(Tue Feb 01 18:19:58 UTC 2022)
|
|
(GPL source distribution)
|
|
Java Runtime: Java(TM) SE Runtime Environment
|
|
JVM: Java HotSpot(TM) 64-Bit Server VM
|
|
Default Encoding: UTF-8
|
|
Language: en
|
|
Country: US
|
|
--></g></svg> |