Files
project-infra/presentation/diagrams/s18-asymmetric-vs-symmetric.drawio

229 lines
22 KiB
Plaintext

<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
<diagram name="s18-asymmetric-vs-symmetric" id="asym-sym">
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" value="TLS 암호화의 경계 — 비대칭 (ECDSA, 신원 확인) vs 대칭 (AES, 데이터 암호화)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
</mxCell>
<mxCell id="subtitle" value="yaml 의 ECDSA = 핸드셰이크 1 회 (서버가 cert 주인임을 증명) · AES = 그 이후 모든 application data" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
</mxCell>
<mxCell id="grp-asym" value="① 핸드셰이크 단계 — 비대칭 암호 (ECDSA · 단 1 회, 신원 증명 + 키 교환)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#5B21B6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
<mxGeometry x="40" y="120" width="1100" height="320" as="geometry" />
</mxCell>
<mxCell id="browser" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
<mxGeometry x="80" y="170" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="browser-lbl" value="Browser" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="40" y="234" width="140" height="20" as="geometry" />
</mxCell>
<mxCell id="browser-sub" value="(검증자)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
<mxGeometry x="40" y="254" width="140" height="18" as="geometry" />
</mxCell>
<mxCell id="server-icon" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.server_2;" vertex="1" parent="1">
<mxGeometry x="1010" y="170" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="server-lbl" value="Server (cert 소유)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="950" y="234" width="180" height="20" as="geometry" />
</mxCell>
<mxCell id="cert-badge" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="940" y="258" width="200" height="60" as="geometry" />
</mxCell>
<mxCell id="cert-badge-title" value="X.509 인증서" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingTop=4;" vertex="1" parent="1">
<mxGeometry x="940" y="258" width="200" height="18" as="geometry" />
</mxCell>
<mxCell id="cert-badge-pub" value="공개키: ECDSA P-256" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#5B21B6;" vertex="1" parent="1">
<mxGeometry x="940" y="278" width="200" height="18" as="geometry" />
</mxCell>
<mxCell id="cert-badge-yaml" value="(← 본 yaml 이 정의)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C3AED;" vertex="1" parent="1">
<mxGeometry x="940" y="296" width="200" height="18" as="geometry" />
</mxCell>
<mxCell id="msg1-arrow" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="180" y="345" as="sourcePoint" />
<mxPoint x="940" y="345" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="msg1-num" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="200" y="333" width="24" height="24" as="geometry" />
</mxCell>
<mxCell id="msg1-lbl" value="ClientHello (지원하는 cipher suites 제안)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="290" y="324" width="380" height="20" as="geometry" />
</mxCell>
<mxCell id="msg2-arrow" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="940" y="375" as="sourcePoint" />
<mxPoint x="180" y="375" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="msg2-num" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="900" y="363" width="24" height="24" as="geometry" />
</mxCell>
<mxCell id="msg2-lbl" value="ServerHello + Certificate (X.509, ECDSA 공개키 포함)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="320" y="354" width="500" height="20" as="geometry" />
</mxCell>
<mxCell id="msg3-arrow" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=4;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="940" y="403" as="sourcePoint" />
<mxPoint x="180" y="403" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="msg3-num" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;fontColor=#B91C1C;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="900" y="391" width="24" height="24" as="geometry" />
</mxCell>
<mxCell id="msg3-lbl" value="ServerKeyExchange (ECDHE 매개변수 + ECDSA 개인키로 서명) ★" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="270" y="382" width="600" height="20" as="geometry" />
</mxCell>
<mxCell id="msg3-callout" value="★ ECDSA 사용 지점 — 서버가 yaml 의 ECDSA 개인키로 ECDHE 값을 서명 (= '나는 이 cert 의 진짜 주인'을 증명)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=1;dashed=1;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="200" y="408" width="730" height="22" as="geometry" />
</mxCell>
<mxCell id="msg4-arrow" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="180" y="438" as="sourcePoint" />
<mxPoint x="940" y="438" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="msg4-num" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="200" y="426" width="24" height="24" as="geometry" />
</mxCell>
<mxCell id="msg4-lbl" value="Verify cert chain (CA 공개키) + ClientKeyExchange (ECDHE 매개변수)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="240" y="417" width="640" height="20" as="geometry" />
</mxCell>
<mxCell id="grp-asym-side" value="비대칭 (ECDSA / RSA) 의 역할" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
<mxGeometry x="1160" y="120" width="400" height="320" as="geometry" />
</mxCell>
<mxCell id="asym-side-1-title" value="① 무엇을 하나" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
<mxGeometry x="1170" y="155" width="380" height="22" as="geometry" />
</mxCell>
<mxCell id="asym-side-1-body" value="• 신원 증명: 서버가 진짜 cert 주인임을 증명&#xa;• 키 교환: ECDHE 로 비밀 공유 (도청 불가)&#xa;• 무결성: 핸드셰이크 메시지 서명/검증" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=18;" vertex="1" parent="1">
<mxGeometry x="1170" y="178" width="380" height="60" as="geometry" />
</mxCell>
<mxCell id="asym-side-2-title" value="② yaml 매핑" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
<mxGeometry x="1170" y="244" width="380" height="22" as="geometry" />
</mxCell>
<mxCell id="asym-side-2-yaml" value="privateKey:&#xa; algorithm: ECDSA&#xa; size: 256&#xa; rotationPolicy: Always" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1E1E;strokeColor=#5B21B6;strokeWidth=1;fontSize=10;fontFamily=monospace;fontColor=#A5F3FC;align=left;verticalAlign=top;spacingLeft=14;spacingTop=6;" vertex="1" parent="1">
<mxGeometry x="1180" y="268" width="220" height="76" as="geometry" />
</mxCell>
<mxCell id="asym-side-2-arrow" value="→ 이 키 = Phase 1 의&#xa; 서버 cert 키만 정의&#xa;→ Phase 2 (AES) 와 무관" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
<mxGeometry x="1410" y="268" width="150" height="76" as="geometry" />
</mxCell>
<mxCell id="asym-side-3-title" value="③ 특징" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
<mxGeometry x="1170" y="354" width="380" height="22" as="geometry" />
</mxCell>
<mxCell id="asym-side-3-body" value="• 공개키 / 개인키 쌍 (서로 다른 키)&#xa;• 연산 비쌈 (ms 단위) → 핸드셰이크 1회만&#xa;• cert 갱신 시 ECDSA 키 교체" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=18;" vertex="1" parent="1">
<mxGeometry x="1170" y="377" width="380" height="60" as="geometry" />
</mxCell>
<mxCell id="grp-boundary" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;dashed=1;" vertex="1" parent="1">
<mxGeometry x="40" y="460" width="1520" height="120" as="geometry" />
</mxCell>
<mxCell id="boundary-title" value="② 비대칭 → 대칭 전환점 — Key Derivation (HKDF)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
<mxGeometry x="40" y="460" width="1520" height="22" as="geometry" />
</mxCell>
<mxCell id="ecdh-secret" value="ECDH&#xa;shared secret&#xa;(양쪽 동일)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="200" y="495" width="180" height="70" as="geometry" />
</mxCell>
<mxCell id="hkdf" value="HKDF" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#B45309;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="500" y="495" width="160" height="70" as="geometry" />
</mxCell>
<mxCell id="aes-key" value="AES 256-bit 키&#xa;+ IV&#xa;+ MAC keys" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="780" y="495" width="180" height="70" as="geometry" />
</mxCell>
<mxCell id="boundary-arrow1" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ecdh-secret" target="hkdf">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="boundary-arrow2" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="hkdf" target="aes-key">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="boundary-conclusion" value="여기서 비대칭 단계 종료 → 이후 모든 데이터는 AES 키로 대칭 암호화&#xa;⚠ AES 키는 yaml 의 ECDSA 와 무관 — 핸드셰이크 결과로 매번 새로 도출됨 (forward secrecy)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=1;dashed=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
<mxGeometry x="990" y="495" width="560" height="70" as="geometry" />
</mxCell>
<mxCell id="grp-sym" value="③ 데이터 전송 단계 — 대칭 암호 (AES 256 GCM · 모든 HTTPS 요청/응답, 지속)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#15803D;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
<mxGeometry x="40" y="600" width="1100" height="190" as="geometry" />
</mxCell>
<mxCell id="browser-2" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
<mxGeometry x="80" y="650" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="browser-2-lbl" value="Browser" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="40" y="714" width="140" height="20" as="geometry" />
</mxCell>
<mxCell id="browser-2-key" value="🔑 같은 AES 키 보유" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#15803D;" vertex="1" parent="1">
<mxGeometry x="40" y="734" width="140" height="18" as="geometry" />
</mxCell>
<mxCell id="server-2" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.server_2;" vertex="1" parent="1">
<mxGeometry x="1010" y="650" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="server-2-lbl" value="Server" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="970" y="714" width="140" height="20" as="geometry" />
</mxCell>
<mxCell id="server-2-key" value="🔑 같은 AES 키 보유" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#15803D;" vertex="1" parent="1">
<mxGeometry x="970" y="734" width="140" height="18" as="geometry" />
</mxCell>
<mxCell id="aes-tunnel-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=3;" vertex="1" parent="1">
<mxGeometry x="200" y="650" width="780" height="60" as="geometry" />
</mxCell>
<mxCell id="aes-tunnel-title" value="◀ ━━━━━ AES-256-GCM 암호화 채널 (모든 HTTPS 트래픽) ━━━━━ ▶" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;" vertex="1" parent="1">
<mxGeometry x="200" y="650" width="780" height="28" as="geometry" />
</mxCell>
<mxCell id="aes-tunnel-sample" value="GET /api/v1/users → 암호화 → … → 복호화 → 처리 → 응답 → 암호화 → …" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#14532D;" vertex="1" parent="1">
<mxGeometry x="200" y="678" width="780" height="22" as="geometry" />
</mxCell>
<mxCell id="sym-callout" value="⚠ 여기서 ECDSA 안 씀! AES 만 사용 · 연산 빠름 (μs 단위) → 모든 트래픽 처리 가능" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=1;dashed=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="80" y="755" width="1020" height="22" as="geometry" />
</mxCell>
<mxCell id="grp-sym-side" value="대칭 (AES) 의 역할" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
<mxGeometry x="1160" y="600" width="400" height="190" as="geometry" />
</mxCell>
<mxCell id="sym-side-1-title" value="① 무엇을 하나" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
<mxGeometry x="1170" y="635" width="380" height="22" as="geometry" />
</mxCell>
<mxCell id="sym-side-1-body" value="• 모든 application data 암호화 (요청/응답)&#xa;• 같은 키로 양쪽이 암/복호화 (대칭)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=18;" vertex="1" parent="1">
<mxGeometry x="1170" y="658" width="380" height="40" as="geometry" />
</mxCell>
<mxCell id="sym-side-2-title" value="② AES 키 출처" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
<mxGeometry x="1170" y="700" width="380" height="22" as="geometry" />
</mxCell>
<mxCell id="sym-side-2-body" value="• ECDH shared secret + HKDF 도출&#xa;• yaml 의 ECDSA 와 무관 — 핸드셰이크 산출물&#xa;• 매 세션 새 키 (forward secrecy)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=18;" vertex="1" parent="1">
<mxGeometry x="1170" y="723" width="380" height="60" as="geometry" />
</mxCell>
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
</mxCell>
<mxCell id="caption" value="cipher suite TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = ECDHE (키 교환) + ECDSA (서버 인증, yaml 의 키) + AES_256_GCM (데이터 암호화) + SHA384 (무결성)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>