๐ ProofCam ๋ด์ธ ์๋ฒ โ ๋์๋ณด๋
๋ด์ธ๋ ํญ๋ชฉ๊ณผ ์๋ฒ ์ํ๋ฅผ ํ ํ๋ฉด์์ ๋ณธ๋ค.
ํ์ฌ ๋ด์ธ๋ ํญ๋ชฉ ์ ์ฅ์์์ ์ค์๊ฐ ยท ๋ด์ธ์ผ์(KST) ์ต์ ์ โ ์๋ก๊ณ ์นจํ๋ฉด ๊ฐฑ์
| ์ข ๋ฅ | seal_id | ๋ด์ธ์ผ์ (KST) | ๋ชจ๋/๋ฒ์ | ๋ฒ๋ค | ํ์์คํฌํ | ์๋ณธ | ์ง๋ฌธยท๋ง์ ์์ฑ=์ง๋ฌธยท์ฌ์ง์์=๋ง์ |
|---|---|---|---|---|---|---|---|
6ad34c55d1424cbdโฆ | 2026-09-16 16:50:57 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
61c48346d0f348f3โฆ | 2026-09-16 16:50:54 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
c5ad37610efc43efโฆ | 2026-09-16 14:26:03 KST | server-composited / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | 2e6d29d1f7594659โฆ | 2026-09-16 13:51:08 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
2c9bd04900df4690โฆ | 2026-09-16 13:42:08 KST | server-composited / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
037dc9df497e4ca8โฆ | 2026-09-16 13:41:45 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
826e39dbc35744a2โฆ | 2026-09-16 13:41:36 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
e4f84cfa6ee94bb3โฆ | 2026-09-09 15:58:10 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
eaad2c72e11e42beโฆ | 2026-09-09 15:57:00 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
ca90071da83a42b0โฆ | 2026-09-09 15:56:12 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
8aa40f2cd29a4d8cโฆ | 2026-09-09 15:48:58 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | 0d04d48838b14512โฆ | 2026-09-07 13:39:39 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | d4d726503ab04eb1โฆ | 2026-09-04 11:54:40 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
922e8da1c70d41e6โฆ | 2026-09-04 10:51:49 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
ed50d3dc1b4e435aโฆ | 2026-09-04 09:04:15 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
b6f272d6db8f4215โฆ | 2026-09-04 09:04:12 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
cddf8ae3fbd94343โฆ | 2026-09-03 15:39:23 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
23b9a4b4651c4f87โฆ | 2026-09-03 15:35:27 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
a42688c9995c4467โฆ | 2026-09-03 13:33:39 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
0bdef514968a45a1โฆ | 2026-09-03 13:31:00 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
8656f27826d24f93โฆ | 2026-09-03 13:24:12 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
d30cf8417952435aโฆ | 2026-09-03 13:24:08 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
c73dc14bdacb46b2โฆ | 2026-09-03 13:03:24 KST | client-hybrid / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
289f388f69fe41a9โฆ | 2026-09-03 13:03:22 KST | client-hybrid / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
f30562e0ca104882โฆ | 2026-09-03 08:50:56 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | cbeea4a7b54f475eโฆ | 2026-09-02 14:20:15 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
caff1e94aecf4080โฆ | 2026-09-02 14:17:42 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | 1d4eb8983c0847beโฆ | 2026-09-02 14:15:32 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 70f655dc9cba4e00โฆ | 2026-09-02 13:38:42 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | b0ff64972e9b4c82โฆ | 2026-09-02 12:47:38 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | e5f2bb5ccfa14ed4โฆ | 2026-07-29 14:52:44 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
37021e0ffd044ed0โฆ | 2026-07-27 17:05:39 KST | server-composited / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
c4728f9ad7194568โฆ | 2026-07-27 17:04:17 KST | server-composited / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
3502457bb3fe4e7fโฆ | 2026-07-27 17:03:22 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
a468b2eddfc74373โฆ | 2026-07-27 16:31:14 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
eb043d934a2c4fdfโฆ | 2026-07-27 13:46:26 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
f5a1ec0bca494870โฆ | 2026-07-27 13:24:10 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
c118997a49f74a10โฆ | 2026-07-21 18:28:05 KST | server-excerpt / vseal-manifest/0.2 โณ ๋ฐ์ท โ 360108ceโฆ [10000โ15000ms] | โ | โ | โ | โ ๋ง์ | |
| ์์ฑ | 53627c80f7964e92โฆ | 2026-07-21 16:12:39 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 1cbd900a78d948e2โฆ | 2026-07-21 15:55:09 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 50b5537900564c10โฆ | 2026-07-21 15:15:12 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 3db5bec9ad8e4eb4โฆ | 2026-07-21 15:11:44 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
dda5f32ca20a4213โฆ | 2026-07-21 15:00:53 KST | server-composited / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
3a1c50642f8541c4โฆ | 2026-07-21 13:59:43 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
f24bddf225df4be8โฆ | 2026-07-21 13:59:29 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | 24e859fb8ce54a41โฆ | 2026-07-21 13:58:55 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 7ba3fcfd4b484ab0โฆ | 2026-07-21 13:35:30 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | ea021ff7321f4527โฆ | 2026-07-06 15:34:44 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 97331ccee9014465โฆ | 2026-07-06 04:51:14 KST | server / vseal-manifest/0.1 | โ | 1 | โ | โ ์ง๋ฌธ |
| ์์ฑ | f97ebf4446974b19โฆ | 2026-07-03 12:51:42 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
69a8bc3986d74d51โฆ | 2026-07-02 16:51:35 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
92a6c34427014bd8โฆ | 2026-07-02 16:24:32 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
09f26ca827214d9dโฆ | 2026-07-02 15:38:49 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
40501024e6a6443bโฆ | 2026-07-01 15:49:19 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
5db69f6e59274887โฆ | 2026-07-01 15:36:58 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
e9b09f1c857f49f4โฆ | 2026-07-01 15:29:45 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
336b9470fd87404dโฆ | 2026-07-01 14:26:13 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
48f5b7c8884d41c2โฆ | 2026-07-01 12:30:36 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
4d32f6b257d94b2bโฆ | 2026-07-01 12:24:43 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
990207462cb0476cโฆ | 2026-07-01 11:06:57 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
360108ce2997493fโฆ | 2026-07-01 10:05:02 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
80fac5b46fff49bdโฆ | 2026-06-30 18:26:37 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
c06e417516924684โฆ | 2026-06-30 17:52:09 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
7ef9dfa60887468eโฆ | 2026-06-30 17:29:19 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
9d98bfe3c9884aa4โฆ | 2026-06-30 16:16:12 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | 83318ebdb05645abโฆ | 2026-06-30 16:14:02 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
611a2d49849947e0โฆ | 2026-06-30 16:13:45 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
8cd514c4e8754a6fโฆ | 2026-06-30 16:13:19 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
6ef74642c3b547a6โฆ | 2026-06-30 15:45:04 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
56de8c4f245d461cโฆ | 2026-06-30 15:41:08 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
b7bb81712d5b4c66โฆ | 2026-06-30 14:09:52 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | 5e499d3defa14519โฆ | 2026-06-30 14:07:48 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
| ์์ฑ | 9e7b39e953ee40a3โฆ | 2026-06-29 18:14:02 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
22c04ff2570345d8โฆ | 2026-06-29 18:13:39 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
ac0e8f4689b9497eโฆ | 2026-06-29 18:13:30 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
| ์์ฑ | f99e987cf6504fecโฆ | 2026-06-29 17:36:28 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
010413f40bdc4292โฆ | 2026-06-29 17:36:12 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
620de2c8e61449e1โฆ | 2026-06-29 17:35:54 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
bb128769aa1f473eโฆ | 2026-06-29 16:09:01 KST | server-composited / vseal-manifest/0.2 | โ | โ | โ | โ ๋ง์ | |
cbb1166976354429โฆ | 2026-06-29 16:05:03 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
c3839ea1537c4381โฆ | 2026-06-26 15:09:53 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
5deae5d848424d92โฆ | 2026-06-26 15:09:43 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
1651e7738a794298โฆ | 2026-06-26 10:35:51 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ๋ง์ | |
| ์์ฑ | f70aaf3df2594d96โฆ | 2026-06-25 12:32:09 KST | client-hybrid / vseal-manifest/0.2 | โ | 2 | โ | โ ์ง๋ฌธ |
ํ ๋ น์ = ๊ฐ์ seal_id๋ก ๋ฒ๋คยทํ์์คํฌํยท์๋ณธยท์ง๋ฌธ์ด ๋ฌถ์. ์๋ณธ/์ง๋ฌธ์ best-effort(์์ ์ ์์).
ํ๊ธฐ๋ ๋ด์ธ ๋ฌ๋น ์ฅ๋ถ โ ์ง์์ง ๋ด์ธ์ ์ง์ธ ์ ์๋ ํ์
ํ๊ธฐ๋ ๋ด์ธ์ด ์์ต๋๋ค.
๋ฒ๋ค์ GOVERNANCE ์ ๊ธ์ด๋ผ ๊ถํ ์๋ ์ด์์๊ฐ ํ๊ธฐํ ์ ์์ต๋๋ค. ํ๊ธฐํ๋ฉด ๋ด์ฉ์ ์ฌ๋ผ์ง์ง๋ง ์์๋ค๋ ์ฌ์คยทํด์ยท์ฌ์ ๋ COMPLIANCE ์ ๊ธ์ ๋ฌ๋น๋ก ๋จ์ต๋๋ค โ ๋ถ๋ฆฌํ ๋ด์ธ๋ง ๊ณจ๋ผ ์ง์ด ํ์ ์ด ๋๋ฌ๋๋๋ก. ๊ฐ์ธ์ ๋ณด๋ ๋ฌ๋น์ ๋ด๊ธฐ์ง ์์ต๋๋ค.
๊ธฐ๋ฅ ๋งต ๋ฌด์์ / ์ด๋ ์๋ํฌ์ธํธ๊ฐ / ์ด๋ ๊ตฌํ
| ๊ธฐ๋ฅ | ์๋ํฌ์ธํธ | ๊ตฌํ ์์น | ์ํ |
|---|---|---|---|
| ๋ด์ธ ์์ฑ (์๋ฒ ๋ชจ๋) | POST /seal | app/seal.py ยท sealcore.py ยท tsa.py | โ ์๋ฃ |
| ๊ฒ์ฆ (C1~C4 ์ฌํ + ํค์ ์ C5 + ๋ฐ์ท C6) | POST /verify | app/seal.py:verify_seal ยท cert.py (C5) ยท excerpt_service.py (C6) | โ ์๋ฃ |
| ๋จ์ผ๊ตฌ์กฐ ๋ด์ธ ์์ (sealed WAV 1๊ฐ) | POST /seal/intake | main.py ยท containers ยท sealcore ยท original_store ยท fingerprint | โ ์๋ฃ |
| ์๊ฐ ๋์ฅ (temporaryโconfirmed) | POST /seal/{id}/timestamp | app/seal.py ยท tsa.py | โ ์๋ฃ |
| ์๋ณธ ์์นด์ด๋ธ + ์ง๋ฌธ ์์ธ (backfill) | POST /seal/{id}/original | app/original_store.py ยท fingerprint.py | โ ์๋ฃ |
| ๋ณํ๋ณธ/์ง๊น๊ธฐ ์๋ณ | POST /identify | app/identify.py ยท wire.py (AudioDfs) | โ ์๋ฃ |
| ์ธ๊ทธ๋จผํธ ๋์กฐ ๊ฒ์ฆ (์ง๊ฐ์ ) | POST /verify/segment | app/segcompare.py (numpy/scipy FFT) | โ ์๋ฃ |
| ์ถ์ฒ ์ฐพ๊ธฐ (์ผ๋ฐ ํด๋ฆฝ โ ์ด๋ ๋ด์ธ ์ด๋) | POST /locate | app/locate.py (์ง๋ฌธ + ์ธ๊ทธ๋จผํธ ๋์กฐ) | โ ์๋ฃ |
| ๋ฐ์ท๋ณธ ์์ฑ (Merkle ์ถ์ฒ ์ฆ๋ช , C6) | POST /seal/{id}/excerpt | main.py ยท excerpt_service ยท merkle.py ยท seal.create_derived_seal | โ ์๋ฃ |
| ๋ฐ์ท๋ณธ ์ญ๋ฐฉํฅ ์กฐํ (์๋ณธโ๋ฐ์ท๋ค) | GET /seal/{id}/excerpts | seal.find_excerpts | โ ์๋ฃ |
| ๋ด์ธ ํ์ผ ๋ค์ด๋ก๋ (์๊ธฐ์๊ฒฐ WAV) | GET /seal/{id}/download | app/original_store.py | โ ์๋ฃ |
| ๋๋ฐ์ด์ค cert ๋ฐ๊ธ (ยง13.15 ํค ์ ์) | POST /device/cert ยท GET /cert/root | app/cert.py ยท signer.py (KMS root) | โ ์๋ฃ |
| ์๋ฒ ํค custody (KMS Ed25519, HSM) | (SEAL_SIGNING_BACKEND=kms) | app/signer.py ยท seal.py ยท cert.py | โ ์๋ฃ |
| S3 ์๋ณธ ์์นด์ด๋ธ (๋ผ์ด๋ธ) | (SEAL_ORIGINAL_BACKEND=s3) | app/original_store.py:S3OriginalStore | โ ์๋ฃ |
| ๋ฒ๋ค ์กฐํ | GET /seal/{id} | app/main.py ยท sealstore.py | โ ์๋ฃ |
| ๋ธ๋ก์ฒด์ธ ์ต์ปค๋ง (OTS) | (opt-in SEAL_OTS_ENABLED) | app/anchor.py | โช ๊ตฌํ๋จยท๊บผ์ง |
| ๋ค์ค TSA (K-of-N) | (SEAL_TSAS ์ค์ ) | app/tsa.py | โ ์๋ฃ |
| ์ค WORM (MinIO/S3 Object Lock) | (SEAL_STORE_BACKEND=minio) | app/sealstore.py | โ ์๋ฃ |
| ๊ฐ์ฌ ํด์์ฒด์ธ | (SEAL_AUDIT_DIR) | app/audit.py | โ ์๋ฃ |
| ๊ฐ์ฌ๋ก๊ทธ headโOTS ์ต์ปค (์ ์ฒด ์ฌ์์ฑ ํ์ง) | CLI: audit-cli anchor-head / verify-anchors | app/audit_anchor.py | โ ์๋ฃ |
| ๋๋ฐ์ด์ค cert ํ๊ธฐ (CRL, ๋ง๋ฃ ์ธ + LTV) | (SEAL_DEVICE_CRL) | app/cert.py:build_crl/verify_chain | โ ์๋ฃ |
| ๊ธฐ๊ธฐ ๋จ์กฐ ์ํ์ค (์คํ๋ผ์ธ ๋ค๋์์กฐ ์ฐจ๋จ) | (์๋ฒ ๊ฐ์ ยท์ฑ emit ๋๊ธฐ) | app/device_sequence.py | โช ๊ตฌํ๋จยท๊บผ์ง |
| ์๊ฐ ํํ ๋น์ฝ (์๋ฐฉํฅ ์๊ฐ) | (SEAL_BEACON_PUBKEYยท์ฑ emit ๋๊ธฐ) | app/beacon.py ยท seal.py:_time_precision | โช ๊ตฌํ๋จยท๊บผ์ง |
| ํค ํ์ ยทํ๊ธฐยทkeyring ์์ฒด์๋ช | CLI | app/keyring*.py | โ ์๋ฃ |
์ ๊ด ๋ ํฌ / ์ฝ๋๋ฒ ์ด์ค ์ ํ์ ์ด๋ฃจ๋ ๊ณณ
| ๋ ํฌ/๋ชจ๋ | ์ญํ | ์ธ์ด | GitLab | ์ค๋ช |
|---|---|---|---|---|
sound-fingerprint | ๐ฅ๏ธ ๋ด์ธ ์๋ฒ (์ด repo) | Python / FastAPI | proofcam/sound-fingerprint | ๊ถ์ ๋ณด๊ดยท์๊ฐ ๋์ฅยท์ง๋ฌธ ์์ธยท๊ฒ์ฆ ๋ณธ์ฒด. ๋ฐ๋ชจ https://proofcam.deshow.co.kr. |
proofcam-android :seal | ๐ฑ ๋ด์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์์ JVM) | Kotlin | proofcam/proofcam-android | canonical/manifest/signer/WAV/๋ฒ๋ค/SealClient/SealVerifier. ์๋ฒ์ ๊ฐ์ SPEC. |
proofcam-android :app | ๐ฑ ๋ด์ธ dev ์ฑ (ํฐ) | Kotlin / Android | proofcam/proofcam-android | ๋ น์โ๋ด์ธโ์ ๋ก๋. AudioRecorderยทMainActivityยทSealUploader. |
proofcam-android :verifier | ๐ฑ ๊ฒ์ฆ ์ ์ฉ ์ฑ | Kotlin / Android | proofcam/proofcam-android | ์๋ช ํคยท๋คํธ์ํฌ ๊ถํ ์์ โ ํธ๋ฌ์คํธ ๋ถ๋ฆฌ. ์คํ๋ผ์ธ C1~C3. |
audiodfs-linux | ๐ ํ๊ฑฐํ๋ฆฐํธ ์์ง (๋ฆฌ๋ ์ค ํฌํ ) | C++ ๋ฐ์ด๋๋ฆฌ | (git ์๋, ๋ก์ปฌ) | ์๋ฒ๊ฐ shell out: extract/filtering_server/client. ๋ชจ๋ฐ์ผ ํฌํ ์ ํจ. |
own_skills/ ยท benchmark/ | ๐ ๋ณด์กฐ ์์ฐ | โ | (gitignore, ์ปค๋ฐ ๊ธ์ง) | AudioDfs ์๋ณธ ์์ค(ETRI ๋งค์ ) ยท ์์ง ๋น๊ต ์ฐ์ถ๋ฌผ. |
[๐ฑ :app ํฐ ์ฑ] โโ๋
น์โKeystoreํค ์๋ช
(:seal)โโHTTPSโโโถ [๐ฅ๏ธ ์๋ฒ proofcam.deshow.co.kr]
โ TEE P-256 + ยง13.15 cert(Ed25519์ฒด์ธ) โ intakeโtimestamp(KMS์๋ช
)โS3 ์๋ณธ
โ ๋ก์ปฌ ์ ์ฅ(sealed WAV) โโโถ [๐ audiodfs-linux] ์ง๋ฌธ ์ถ์ถ/๊ฒ์
โผ โผ
[๐ฑ :verifier ์ฑ] โโโ์คํ๋ผ์ธ ๊ฒ์ฆ(C1~C5)โโ /state/ (๋ฒ๋คยท์๋ณธโS3ยท์ง๋ฌธยท๊ฐ์ฌ)
proofcam ๊ด๋ จ์ ์ 3๊ณณ๋ฟ. ~/IdeaProjects์ deshow*ยทexocobio*ยทits-* ๋ฑ์ ๋ฌด๊ด.
์ ๋ขฐ์ ๋ฟ๋ฆฌ ๋๋ถ๋ถ ์ค์ โ Play Integrity๋ง prod ๋๊ธฐ
| ํญ๋ชฉ | ์ง๊ธ | ๋์ด์ผ ํ ๊ฒ / ๋น๊ณ | ์ํ |
|---|---|---|---|
| ์๊ฐ ์ฆ์ธ (TSA) | โ freeTSA RFC3161 (์ค์ฐ๋, ๋ผ์ด๋ธ) | (์๋ฃ) ์ธ์ฆ์ ํ ๊ฒ์ฆ ํฌํจ | โ ์๋ฃ |
| ๋ธ๋ก์ฒด์ธ ์๊ตฌ ์ฆ์ธ | โ OpenTimestamps tentative (์ ์ถ๋จ) | upgrade ์๋ํ โ Bitcoin block confirmed (~1h+) | โ ์๋ฃ |
| ์ ์ก ๋ณด์ | โ HTTPS (proofcam.deshow.co.kr, Let's Encryptยท์๋๊ฐฑ์ ) | (์๋ฃ) prod ๋๋ฉ์ธ/์ธ์ฆ์๋ ๋ณ๋๋ก ํ๋ฉด ๋จ | โ ์๋ฃ |
| ์๋ช ํค custody | โ AWS KMS Ed25519 (HSM) โ ยง13.15 root + ์๋ฒ ๋ด์ธํค | (์๋ฃ) ๊ฐ์ธํค๊ฐ HSM ๋ฐ์ผ๋ก ์ ๋์ด. '์คํ๋ผ์ธ ๋ฃจํธ'๋ prod ์ต์ | โ ์๋ฃ |
| ๋๋ฐ์ด์ค ํค ์ ์ (C5) | โ HW P-256 ํค + cert(KMS root) โ ๋ด์ธ identity-bound (์ค๊ธฐ๊ธฐ ๊ฒ์ฆ) | (์๋ฃ) ๋๋ฐ์ด์ค leaf=ํ๋์จ์ด P-256, ์ฒด์ธ=Ed25519/KMS. ์ด ๊ธฐ๊ธฐ Ed25519 HW ๋ฏธ์ง์์ด๋ผ P-256 | โ ์๋ฃ |
| ๊ธฐ๊ธฐ/์ฑ ์ฆ๋ช (attestation) | deferred (์ฝํ ๋ชจ๋) | Play Integrity / App Attest โ Google ํ๋ก์ ํธ ํ์, prod ๋จ๊ณ | ๐ด dev ๋์ฒด๋ฌผ |
โ ์๊ฐ(TSAยทOTS)ยท์ ์ก(HTTPS)ยทํค custody(KMS HSM)ยท๋๋ฐ์ด์ค ์ ์(ยง13.15)๊น์ง ์ค์ ๋ก ๋์. ๋ด์ธ์ด **C5 identity-bound**(์ค๊ธฐ๊ธฐ ๊ฒ์ฆ) โ ๋๋ฐ์ด์ค HW P-256 ํค โ KMS root ๊ฒฐ์. ๋จ์ ๊ฑด Play Integrity(๊ธฐ๊ธฐ/์ฑ attestation) โ Google ํ๋ก์ ํธ ํ์, prod ๋จ๊ณ์.
๋ฒ์ ๋ฐ (์๋์ ์ผ๋ก ์ ํจ)
- ์บก์ฒ ์ด์ ์์กฐ(์๋ ๋ก๊ทธ ํ): ์คํผ์ปค๋ก ๋ฅํ์ดํฌ ํ์ด ๋ น์ โ ๋ฒ์ ๋ฐ
- ๋ผ์ด๋ธ๋์ค/์บก์ฒ-์ด์ ๋ฅํ์ดํฌ ํ์ง โ ์ฌ์ฉ์ ๋ช ์ scope-out
- reorder(์์ ๋ฐ๊ฟ) ํ์ง โ wire ํ๋กํ ์ฝ์ด offset ๋ฏธ์ ๊ณต, ๋ณ ํธ๋
๋ค์ ํ ์ผ
| ํญ๋ชฉ | ๋ด์ฉ | ๋ถ๋ฅ |
|---|---|---|
| ์ฅ์๊ฐ ๋ น์ ์คํธ๋ฆฌ๋ฐ (Inc-1~4) | 44.1kHzยท3-4์๊ฐ(1.27GB) โ ๋ น์๊ธฐ ํ์ผ์คํธ๋ฆฌ๋ฐ(Inc-1 ์์ฑ๋จ, ๋น๋๋๊ธฐ)ยท๋ด์ธ ํ์ดํ๋ผ์ธ ์คํธ๋ฆผํยท์๋ฒ ์ธํ ์ดํฌ ์คํธ๋ฆฌ๋ฐยท์ฌ๊ฐ ์ฒญํฌ ์ ๋ก๋+์คํ๋ผ์ธ ํ(๊ฐํ ์ธํฐ๋ท์๋ ์ ์์) | ๐ด ์๋+์๋ฒ |
| ๋๋ฐ์ด์ค ยง13.15 ๋น๋ ๊ฒ์ฆ | Keystore Ed25519 ์์ํค + cert ๋ฐ๊ธ/embed ์์ฑ๋จ(๋ฏธ๋น๋). ๋น๋ํด ๋ด์ธ์ด C5 identity-bound ๋จ๋์ง ํ์ธ. Keystore Ed25519 KeyGenSpec digest๋ ๊ธฐ๊ธฐ/KeyMint๋ณ ์กฐ์ ๊ฐ๋ฅ์ฑ | ๐ก ์๋ ๋น๋ |
| ๊ฒ์ฆ๊ธฐ ์๊ฐ ์ ๋ฐ๋ ํ์ | /verify์ time ๊ฐ์ฒด(์ ๋ขฐ์ํ vs ์๊ฐ์ ๊ณ ์บก์ฒ + ์ ๋ฐ๋ tier)๋ฅผ ๊ฒ์ฆ๊ธฐ '์ธ์ '์ 3์ธต ํ์ โ ์คํด ๋ฐฉ์ง | ๐ก ์๋ |
| ํ์์คํฌํ ํ์ผ ๋ฐฑํ | RFC3161 ํ ํฐ์ WAV์ ๋ฐ์ C4๊น์ง ์๊ธฐ์๊ฒฐ(์๋ฒ ์์ด๋ confirmed ์ ์ง, ยง13.14) | ์๋+์๋ฒ |
| OTS upgrade ์ค์ผ์ค๋ฌ ๋ฐฐ์ | ๋ฐฐ์น ์น๊ฒฉ(upgrade_pending)ยท๋ค์ค calendar ๋ณํฉ(submit_all) โ โ ๋จ์ ๊ฑด ์ฃผ๊ธฐ ํธ์ถ cron/์์ปค ๋ฐฐ์ (ops) | ์ด์ |
| ์๋ฒ ํค prod ๊ฐํ (์ต์ ) | ์คํ๋ผ์ธ ๋ฃจํธ(KMS root๋ ํ์ ๋ฏธ์ฌ์ฉ) ยท CloudHSM ยท ํค ํ์ ยทCRL | ๐ต prod |
| Play Integrity (์ธ๋ถ) | ๊ธฐ๊ธฐ/์ฑ attestation ์คํธ์ถ โ Google Cloud ํ๋ก์ ํธ + Play Console ๋ฑ๋ก + ์ค๊ธฐ๊ธฐ. prod/์ ์ฉ์๋ฒ ์ด์ ๋จ๊ณ์ | โซ ์ธ๋ถ |
| ์ด์ ์ก์ผ | filtering_server ํซ๋ฆฌ๋ก๋ ยท H4/H5(verify CLIยทtemporary ๋ง๋ฃ) ยท ๋ฐ๋ชจ ํ IAM ํค rotate | ์ด์/๋ณํ |
์ ์ฅ ์์น ํ์ฌ ์๋ฒ ์ค์ ๊ธฐ์ค
| ๋ฐ์ดํฐ | ๊ฒฝ๋ก | ํ์ผ |
|---|---|---|
| ๋ฒ๋ค (WORM) | /state/seal_store | {id}.seal.json + .anchors.jsonl |
| ํ๊ธฐ ๋ฌ๋น (COMPLIANCE) | /state/seal_store/tombstones | {id}.tombstone.json |
| ์๋ณธ ์์ฑ (์ญ์ ๊ฐ๋ฅ) | s3://proofcam/sound/originals | {id}.wav |
| ์ง๋ฌธ ์์ธ | /state/fpidx | {id}.dfs |
| ๊ฐ์ฌ๋ก๊ทธ | (๊บผ์ง) | YYYY-MM.jsonl |
์ฉ์ด์ง ๋ฒ๋คยทTSAยทattestationโฆ ํ๊ณณ์
| ๋ด์ธ (Seal) | ๋ น์์ '์ด ์๊ฐ ์ด ๋ด์ฉ ๊ทธ๋๋ก'๋ผ๊ณ ์ ๊ทธ๋ ํ์/๊ฒฐ๊ณผ. ํด์+์๋ช +์๊ฐ๋์ฅ์ ํ ๋ฌถ์์ผ๋ก ๋ง๋ ๊ฒ. |
| ๋ฒ๋ค (Bundle) | ๋ด์ธ์ ์ฆ๊ฑฐ ๋ฌถ์(JSON). ๋งค๋ํ์คํธ + ์๋ช + ๊ณต๊ฐํค๊ฐ ๋ค์ด์์. ์ค๋์ค ์์ฒด๋ ์๊ณ 'ํด์'๋ง. = store/{id}.seal.json |
| ๋งค๋ํ์คํธ (Manifest) | ๋ด์ธ ๋์์ ๋ช ์ธ. ์ค๋์ค ํด์(payload_sha256)ยทํฌ๋งทยท๊ธฐ๊ธฐยท๋น์ฌ์ ์ง์ ยท์บก์ฒ์๊ฐ ๋ฑ. ์ด๊ฑธ ์๋ช ํ๋ค. |
| ํ์ด๋ก๋ (Payload) | ์ค๋์ค์ '์ค์ ์๋ฆฌ' ๋ถ๋ถ. WAV์ fmt+data. ํค๋ ๋ฉํ๋ ์ ์ธ โ ์ฌํฌ์ฅํด๋ ์ ๋ณํ๋ ๋ณธ์ง. |
| ํด์ (Hash, SHA-256) | ๋ฐ์ดํฐ์ ์ง๋ฌธ ๊ฐ์ ๊ณ ์ ๊ธธ์ด ๊ฐ. ํ ๋ฐ์ดํธ๋ง ๋ฐ๋์ด๋ ์์ ํ ๋ฌ๋ผ์ง โ ๋ณ์กฐ ํ์ง. |
| ์๋ช (Signature, Ed25519) | ๊ฐ์ธํค๋ก ๋งค๋ํ์คํธ์ ๋์ฅ. ๊ณต๊ฐํค๋ก ๋๊ตฌ๋ '์ด ํค ์ฃผ์ธ์ด ์๋ช ํ๊ณ ์ ๋ฐ๋'์ ๊ฒ์ฆ. = ์์กฐ ๋ถ๊ฐ ๋ ์ธ. |
| ํค (Key pair) | ๊ฐ์ธํค(์๋ช ์ฉ, ๋น๋ฐ) + ๊ณต๊ฐํค(๊ฒ์ฆ์ฉ, ๊ณต๊ฐ) ํ ์. ์๋ฒํค=AWS KMS Ed25519(HSM ์, ยง13.15 root+๋ด์ธํค), ๋๋ฐ์ด์คํค=Android Keystore **P-256(ECDSA)**(TEE/StrongBox โ ์ด ๊ธฐ๊ธฐ KeyMint๊ฐ Ed25519 HW ๋ฏธ์ง์์ด๋ผ P-256). ๋ ๋ค ๊ฐ์ธํค๊ฐ ๋ณด์ํ๋์จ์ด ๋ฐ์ผ๋ก ์ ๋์ด. ๋๋ฐ์ด์ค leaf=P-256, ์ฒด์ธ=Ed25519 ํผํฉ. |
| TSA (์๊ฐ ์ธ์ฆ๊ธฐ๊ด) | Time Stamping Authority. '์ด ํด์๊ฐ ์ด ์๊ฐ ์ด์ ์ ์กด์ฌํ๋ค'๋ฅผ ์๋ช ํด์ฃผ๋ ๋ ๋ฆฝ ์ 3์. ํ์ค=RFC3161. |
| RFC3161 | TSA ํ์์คํฌํ ํ ํฐ์ ๊ตญ์ ํ์ค ํฌ๋งท. ๋ด์ธ์ '์ ๋ขฐ๋ ์๊ฐ ์ฆ์ธ'์ ๋ถ์ด๋ ๋ฐฉ๋ฒ. |
| ์ต์ปค (Anchor) | ๋ด์ธ ๋ฐ์ ๋ฐ๋ก ๋ถ๋ ์๊ฐ/๋ธ๋ก์ฒด์ธ ์ฆ๊ฑฐ. RFC3161 ํ ํฐ์ด๋ OTS ์ฆ๋ช . = store/{id}.anchors.jsonl |
| OTS (OpenTimestamps) | ๋นํธ์ฝ์ธ ๋ธ๋ก์ฒด์ธ์ ํด์๋ฅผ ๋ฐ์ '์๊ตฌ ์๊ฐ ์ฆ์ธ'์ ๋ง๋๋ ๋ฐฉ์. TSA๋ณด๋ค ๋ ๋ถ์ฐยท์๊ตฌ์ . |
| attestation (๊ธฐ๊ธฐ ์ฆ๋ช ) | '์ด ๋ด์ธ์ด ์ง์ง ์๋๋ก์ด๋ ๊ธฐ๊ธฐยท๋ฏธ๋ณ์กฐ ์ฑ์์ ๋์๋ค'๋ OS ์ฐจ์ ์ฆ๋ช . Play Integrity / App Attest. ์ง๊ธ์ deferred(์ฝํ ๋ชจ๋). |
| nonce | ์ฌ์ฌ์ฉยท์์กฐ ๋ง์ผ๋ ค ๋งค๋ํ์คํธ์์ ๋ฝ์ 1ํ์ฑ ๊ฐ(ํด์). attestation ํ ํฐ์ ์ด ๋ด์ธ์ ๋ฌถ๋ ๋ฐ ์(ยง13.4). |
| hybrid ๋ด์ธ | ํฐ์ด ์คํ๋ผ์ธ์์ ๋จผ์ ์๋ช (temporary) โ ๋์ค์ ์๋ฒ๊ฐ TSA ๋์ฅ(confirmed). ์์ ์คํ๋ผ์ธ์ ์๊ฐ์ฆ์ธ์ด ์์ด ๋ถ๊ฐ. |
| seal_status | ๋ด์ธ์ ์๊ฐ ํ์ ์ฌ๋ถ. temporary(์๊ฐ์ฆ์ธ 0) / confirmed(RFC3161 โฅ1). ์ ์ฅ๊ฐ ๋ฏฟ์ง ์๊ณ ์ฆ๊ฑฐ ์นด์ดํธ๋ก ๋์ถ. |
| verdict / C1~C6 | ๊ฒ์ฆ ๊ฒ์ฌ. C1=์ด ์ค๋์ค ๋ง๋ ยท C2=๋งค๋ํ์คํธ ์ผ๊ด ยท C3=์๋ช ์ ํจ ยท C4=์๊ฐ ์ฆ์ธ ยท C5=ํค ์ ์(ยง13.15 cert ์ฒด์ธ์ด root๊น์ง ๊ฒฐ์=identity-bound, ์์ผ๋ฉด self-signed) ยท C6=๋ฐ์ท ์ถ์ฒ(Merkle). PASS / PASS-PENDING(์๊ฐ๋ง ๋น ์ง) / FAIL. |
| ๋ฐ์ท๋ณธ / C6 (Merkle) | ์๋ณธ์ ์ผ๋ถ๋ฅผ ์๋ผ ๋ค์ ๋ด์ธํ ๊ฒ(POST /seal/{id}/excerpt). ์๋ณธ ๋ด์ธ ์ PCM์ Merkle ์ปค๋ฐ(container.merkle), ๋ฐ์ท๋ณธ์ range proof๋ฅผ ๋ค๊ณ ๋ค๋ โ C6=์ด ๋ฐ์ท๊ฐ ์ ๋ง ์๋ณธ [t1,t2]์์ ์๋ฒ ์ ๋ขฐ ์์ด ์ฆ๋ช . Merkle ์ ๊ฒฝ๊ณ๋ก ์ค๋ (leaf_seconds, ๊ธฐ๋ณธ 1์ด). ํ๊ฑฐํ๋ฆฐํธ์ ์๋ณด. |
| ์ธ๋ผ์ธ ๋ด์ธ (Inline) | ๋ฒ๋ค์ ๋ณ๋ ํ์ผ์ด ์๋๋ผ WAV์ 'seal' ์ฒญํฌ์ ๋ฐ๋ ๊ฒ. ํ์ผ ํ๋๊ฐ ๊ณง ์๊ธฐ์๊ฒฐ ์ฆ๊ฑฐ. = sealed WAV. |
| WORM | Write Once Read Many. ํ ๋ฒ ์ฐ๋ฉด ๋ชป ๊ณ ์นจ. ๋ด์ธ ๋ฒ๋ค ์ ์ฅ ๋ฐฉ์(0o444 / Object Lock) โ ์ฌํ ์กฐ์ ์ฐจ๋จ. |
| ํ๊ฑฐํ๋ฆฐํธ (.dfs) | ์ค๋์ค์ ์ก์์ ๊ฐํ ์ํฅ ์ง๋ฌธ(AudioDfs). ์ฌ์ธ์ฝ๋ฉ ์ฌ๋ณธยท์ง๊น๊ธฐ ๋งค์นญ์ฉ ๋ณด์กฐ ์๋ฃ. ๋ด์ธ ๋ณธ์ฒด ์๋. |
| identify / splice | ๋ณํ๋ณธยท์ง๊น๊ธฐ ์๋ณ. splice=์ด์ด๋ถ์ธ ๊ฒฝ๊ณ / gap=๊ณต๋ฐฑ ์ด์. ํ๋ฅ ์ ๋ณด์กฐ ๋ผ๋ฒจ(์ฆ๊ฑฐ ๋ณธ์ฒด๋ verify). |
| keyring | ๊ณต๊ฐํค ๋ฐฐํฌยทํ์ ยทํ๊ธฐ ๊ด๋ฆฌ ์ํฐํฉํธ. key_id๋ก ๋ด์ธโ๊ฒ์ฆ ๋งค์นญ. root key๊ฐ keyring ์์ฒด๋ฅผ ์๋ช . |
| custody (๋ณด๊ด ์ฌ์ฌ) | ์ฆ๊ฑฐ๋ฅผ ๋๊ฐ ์ธ์ ๋ถํฐ ๋ณด๊ดํ๋์ ์ฌ์ฌ. ์๋ณธ์ ์ค๋ฆฝ ๋ณด๊ด์์ ๋๋ฉด '๋ น์์โ ๋ณด๊ด์'๋ก ์ ๋ขฐโ. |
| payload_sha256 | ๋งค๋ํ์คํธ ์์ ์ค๋์ค ํด์ ํ๋. ๊ฒ์ฆ C1์ด '์ ์ถ๋ ์ค๋์ค์ ํด์ == ์ด ๊ฐ'์ธ์ง ๋์กฐ. |