Ricochet: ํŒŒ์ผ ์ „์†ก

์— ๋งŒ๋“  2011๋…„ 04์›” 17์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ricochet-im/ricochet

ํŒŒ์ผ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋‚ด๋ถ€ ๊ณ ๋ฐœ์ž ๋“ฑ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

NeedsDecision enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์™€, ์ด๊ฒƒ์€ ์˜ค๋ž˜๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์™„๋ฃŒํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์ „์†ก์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋‚˜ ์ž์‹ ์„ ์„ค๋“ํ•˜๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋ธŒ๋ ˆ์ธ๋คํ”„์ด์ง€๋งŒ ์œ ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

UX

ํŒŒ์ผ ์ „์†ก์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑ ์‚ฌ์šฉ์ž ๋Š” ๋Œ€ํ™” ์ค‘์— ํŒŒ์ผ์„ ๋ณด๋‚ด๊ณ  ๋ฐ›์œผ๋ฉฐ ํŒŒ์ผ์ด ๋Œ€ํ™”์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์‚ญ์ œ ๋Š” ์˜จ๋ผ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์ฆ‰์‹œ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋”๋ผ๋„ ์–ธ์ œ๋“ ์ง€ ํŒŒ์ผ์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์†Œ์ˆ˜์˜ Ricochet ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์‹œ์ง• ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์šฐ๋ฆฌ ๋Š” ๋Œ€ํ™”์˜ ์ผ๋ถ€๋กœ ํŒŒ์ผ ์ „์†ก์„ ์ธ๋ผ์ธ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(๋ธŒ๋ผ์šฐ์ € ํฌํ•จ)์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ๋Œ€ํ™”๋กœ ๋Œ์–ด๋‹ค ๋†“๋Š” ๊ฒƒ์€ ํŒŒ์ผ์„ ๋ณด๋‚ด๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ‹€๋ฆผ์—†์ด ์ด๋Ÿฐ ์‹์œผ๋กœ ์‹ค์ˆ˜๋กœ ํŒŒ์ผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์„ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ์ƒ์ž์— ๋†“๊ณ  ๋ณด๋‚ด๊ธฐ ์ „์— ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋ณด๋‚ด๊ธฐ ์ „์— ์นด์šดํŠธ๋‹ค์šด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์‰ฝ๊ฒŒ ์ด๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™” ํ—ค๋”์˜ ๋ฒ„ํŠผ์ด๋‚˜ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ๊ทผ์ฒ˜์— ํŒŒ์ผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ฐ€์‹œ์ ์ธ UI ๋ฉ”์„œ๋“œ ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ricochet-file-offer
ricochet-file-sending

์ œ๊ณต๋œ ํŒŒ์ผ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์žŠ์–ด๋ฒ„๋ ธ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ฐ€์ •ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„ ํ›„์—

Ricochet์˜ ์œ„ํ˜‘ ๋ชจ๋ธ์€ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ(ํŒŒ์ผ ํฌํ•จ)๋ฅผ ์ž๋™์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์œ„ํ˜‘ ๋ชจ๋ธ์€ ์—ฐ๋ฝ์ฒ˜๋ฅผ ์ž ์žฌ์ ์ธ ๊ณต๊ฒฉ์ž๋กœ ๊ฐ„์ฃผํ•˜๋ฏ€๋กœ ์—ฐ๋ฝ์ฒ˜๊ฐ€ ์‚ฌ์šฉ์ž ์Šน์ธ ์—†์ด ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ จ์˜ ์ž‘์—…์„ ์ค„์ด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŒŒ์ผ ์ „์†ก์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช…์‹œ์  ์ˆ˜๋ฝ์„ ์š”๊ตฌ ํ•ด์•ผ ํ•จ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋ณธ ์œ„์น˜๋ฅผ ๊ตฌ์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ฐ ํŒŒ์ผ์„ ์ €์žฅํ•  ์œ„์น˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ™œ์„ฑ ์‚ฌ์šฉ์ž ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํŒŒ์ผ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ์„ ์ž๋™์œผ๋กœ ์ €์žฅ ํ•˜๋Š” ํ•ฉ๋‹ˆ๋‹ค (์—ฐ๋ฝ์ฒ˜๋ณ„๋กœ๋„ ๊ฐ€๋Šฅ).

ricochet-file-offer-recipient
ricochet-file-receiving

ํ™œ์„ฑ ์ œ์•ˆ ๋˜๋Š” ์ „์†ก์€ ์–‘ ๋‹น์‚ฌ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ์—์„œ ์ „์†ก ๋Œ€ํ™” ํ—ค๋” (์ „์†ก ํƒญ?) ๋ฐ/๋˜๋Š” ์ „์—ญ ์ „์†ก ์ƒํƒœ์— ์ง„ํ–‰ ์ƒํ™ฉ์ด ์–ด๋”˜๊ฐ€์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ๋Œ€ํ™”๊ฐ€ ๊ณ„์† ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก์ด ์™„๋ฃŒ๋˜๋ฉด ๋Œ€ํ™” ์˜ ๋ ์œผ๋กœ

ricochet-file-conv-header

๋ธŒ๋ผ์šฐ์ € ๊ฒฝ๊ณ ์™€ ์œ ์‚ฌํ•œ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ์„ ํด๋ฆญํ•˜๋ฉด ์™„๋ฃŒ๋œ ์ „์†ก์ด

Tor๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฏ€๋กœ ์žฌ๊ฐœํ•˜๋Š” ๋Šฅ๋ ฅ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ธฐ์กด์˜ ๋ถˆ์™„์ „ํ•œ ํŒŒ์ผ ์œ„์— ์ €์žฅํ•˜์—ฌ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์–ด์•ผ

๋ฏธ๋ž˜์˜ UX

๋Œ€ํ™”์™€ ํ•จ๊ป˜ ์ธ๋ผ์ธ ์œผ๋กœ ์ด๋ฏธ์ง€ ๋””์ฝ”๋”๋ฅผ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ํŒŒ์ผ ์ „์†ก์ด ์™„๋ฃŒ๋˜๋ฉด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•ˆ์ „ํ•œ ๋””์ฝ”๋” ๋˜๋Š” ํ”Œ๋žซํผ ๊ฐ„ seccomp ์Šคํƒ€์ผ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์ฐพ์œผ๋ฉด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ ์–ด๋„ ์—ฐ๊ฒฐ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ์ œํ•œ๊นŒ์ง€ ๋ฒ„ํผ๋งํ•˜์—ฌ ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ ํ•˜์—ฌ ์ „์†ก ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋ณด์ด๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋˜๋Š” ์ „์ฒด ํด๋”์˜ ์ผ๊ด„ ์ „์†ก์„ ํ•ฉ๋ฆฌ์ ์ธ ํ•œ๋„๊นŒ์ง€ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ „์†ก ์„œ๋ฒ„์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ ์˜ ํ•ด์‹œ ๋ฅผ ์ž๋™์œผ๋กœ

๊ทœ์•ฝ

์‚ฌ์ด

ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋Š” Ricochet์˜ ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ทํ™”ํ•˜๋”๋ผ๋„ Tor ์ŠคํŠธ๋ฆผ์˜ ๋ฒ„ํผ๋ง ์†์„ฑ ๋•Œ๋ฌธ์— ์ˆจ๊ฒจ์ง„ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์ด ํ”Œ๋Ÿฌ๋”ฉ๋  ๋•Œ ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€๊ธฐ์—ด์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ๊ทน๋„์˜(์ข…์ข… 30์ดˆ ์ด์ƒ) ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์†๋„ ์ œ์–ด๋Š” ์ „์†ก ์†๋„์— ๋„ˆ๋ฌด ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ๋Œ€๋‹ต์€ ํ”ผ์–ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์„ ์—ฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์€ Tor์— ์˜ํ•ด ๋™์ผํ•œ ํšŒ๋กœ์— ๋‹ค์ค‘ํ™”๋˜์ง€๋งŒ ๋ฒ„ํผ๋ง ๋™์ž‘์€ ํ›จ์”ฌ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋™์ผํ•œ ํšŒ๋กœ์˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ”Œ๋Ÿฌ๋”ฉํ•  ๋•Œ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํšŒ๋กœ ๊ฒฉ๋ฆฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Tor๊ฐ€ ์ „์†ก์„ ์œ„ํ•œ ์ƒˆ ํšŒ๋กœ๋ฅผ ๊ตฌ์ถ•ํ•˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ฒ˜๋ฆฌ๋Ÿ‰์ด๋‚˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ์œ ์šฉํ•œ์ง€ ์—ฌ๋ถ€๋Š” ๋ถˆ๋ถ„๋ช…ํ•˜๋ฉฐ ์ถ”๊ฐ€ ๋™์‹œ ํšŒ์„ ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์ต๋ช…์„ฑ ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋ถ„์„์— ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์—ฌ๋ถ€๋„ ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Ricochet์˜ ํ”„๋กœํ† ์ฝœ์€ ์–ด๋–ค ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ชจํ˜ธํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ์ˆœ์„œ์— ๋Œ€ํ•œ ๊ธฐ๋Œ€์น˜๋ฅผ ์œ„๋ฐ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๋ฝ์ฒ˜๋‹น ๋‘˜ ์ด์ƒ์˜ ์ธ์ฆ๋œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์ด Ricochet์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์ด ๋ฐ์ดํ„ฐ ์ „์†ก์—๋งŒ ์‚ฌ์šฉ๋จ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅด๊ฒŒ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ „์†ก์€ 2์ฐจ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— Ricochet์˜ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ค์ง•ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์˜ต์…˜์„ ์ƒ๊ฐํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ 1: ์ˆ˜์ •๋œ Ricochet ํ”„๋กœํ† ์ฝœ

๋‚ด ์›๋ž˜ ์ƒ๊ฐ์€ ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์—์„œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•ด Ricochet์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์™„์ „ํžˆ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜œํƒ:

  • ํ”„๋กœํ† ์ฝœ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ธ๋ผ์ธ์œผ๋กœ ์ž‘์€ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ์กด ํ”„๋กœํ† ์ฝœ๊ณผ ๋” ์ผ์น˜
  • ์ƒˆ๋กœ์šด ํŒŒ์„œ/์„œ๋ฒ„ ๊ณต๊ฒฉ ํ‘œ๋ฉด ์—†์Œ

๋‹จ์ :

  • ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ธ์ฆ์ด ์ด์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋” ๊นŠ์€ ํ”„๋กœํ† ์ฝœ ์ˆ˜์ •์„ ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฐ์ดํ„ฐ๋Š” ํ—ค๋”๊ฐ€ ์žˆ๋Š” ์ตœ๋Œ€ 65kb ์ฒญํฌ๋กœ ๋ถ„ํ• ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

FileTransferChannel.proto ๋ฐ FileTransferDataChannel.proto ์˜ WIP ๋ถ„๊ธฐ์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์— ๋Œ€ํ•œ ์˜ค๋ž˜๋œ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ 2: HTTP(ํ˜„์žฌ ๊ธฐ๋ณธ ์„ค์ •)

Ricochet ํด๋ผ์ด์–ธํŠธ๋Š” OnionShare ์™€ ์œ ์‚ฌํ•œ ๊ฐ„๋‹จํ•œ ๋‚ด๋ถ€ ์„œ๋ฒ„์™€ ๊ณ ์œ ํ•œ URL์„ ์‚ฌ์šฉํ•˜์—ฌ HTTP๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ์ˆจ๊ฒจ์ง„ ์„œ๋น„์Šค, ์ƒˆ๋กœ์šด ์ž„์‹œ ์„œ๋น„์Šค์˜ ๋‹ค๋ฅธ(์ž„์˜์˜) ํฌํŠธ์— ์žˆ๊ฑฐ๋‚˜ ํ”„๋กœํ† ์ฝœ ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ํฌํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜œํƒ:

  • ๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ/ํ‘œ์ค€/๋ฏธ๋ž˜ ๋Œ€๋น„ ๊ตฌํ˜„
  • ์ˆ˜์‹ ์ž ์—ญํ˜ธํ™˜์„ฑ: URL ํ‘œ์‹œ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์‹ ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๊ธฐํƒ€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ
  • ์—ฐ๋ฝ์ฒ˜๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • ์•„์ฃผ ์ตœ์†Œํ•œ์˜ HTTP ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ผ๋„ ์—ฐ๋ฝ์ฒ˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ ํ‘œ๋ฉด์ž…๋‹ˆ๋‹ค.
  • ์–ด๋–ค C++/Qt ๊ตฌํ˜„์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์•ˆ์ „ํ•œ์ง€ ๋ถˆ๋ถ„๋ช…

์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„

์—ฌ๊ธฐ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋งค์šฐ ์ตœ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— Ricochet์—์„œ 100% ๊ธฐ๋Šฅ ์™„์ „ํ•˜๊ณ  ์‚ฌ์–‘ ๋™์ž‘ ํ˜ธํ™˜ HTTP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ•œ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„์„ _ํ•„์š”ํ•œ_ ๊ธฐ๋Šฅ์œผ๋กœ ์ œํ•œํ•˜๊ณ  (์˜ˆ: ์ฒญํฌ ์ „์†ก ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๋‚œํ•ดํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ Connection: close ๊ฐ•์ œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœ๋œ ์ฝ”๋“œ์˜ ์–‘์ด ๋งค์šฐ ์ ์œผ๋ฉฐ ์—ฌ์ „ํžˆ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๋™์ž‘ ๋ฐ URL ํ˜•์‹

๋™์ผํ•œ ์ˆจ๊ฒจ์ง„ ์„œ๋น„์Šค ์•„๋ž˜์˜ ์ž„์˜ ํฌํŠธ์— HTTP ์„œ๋ฒ„๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋•Œ๋•Œ๋กœ ๋Š๋ฆฌ๊ฑฐ๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋งŽ์€ ์ƒˆ๋กœ์šด ํšŒ๋กœ์™€ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ํ™œ๋™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ํ”ผ์–ด๊ฐ€ ์ž„์˜์˜ .onion์— ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๋™์ผํ•œ .onion ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰ ์ค‘์ด๋ฉด ์—ฐ๋ฝ์ฒ˜ ๋ฐ ๋น„ ์—ฐ๋ฝ์ฒ˜๊ฐ€ ์–ธ์ œ๋“ ์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๊ฐ€์น˜๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ํŒŒ์ผ ์ œ์•ˆ์ด ์žˆ์„ ๋•Œ๋งŒ ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ƒํƒœ๋Š” ํฌํŠธ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์—ฐ๋ฝ์ฒ˜ ๋˜๋Š” ๋น„์ ‘์ด‰์ž๊ฐ€ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ricochet ํด๋ผ์ด์–ธํŠธ ์ด์™ธ์˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ฐ€์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์œ ํšจํ•œ ํŒŒ์ผ ์š”์ฒญ์ด ์•„๋‹Œ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์˜ ๋ชจ๋“  ์š”์ฒญ์€ ์ผ๋ฐ˜ 404 ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ๊ฑฐ๋ถ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ URL์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

http://[address].onion:[port]/ricochet/fetch/[uniqid]/[filename]

[address] must be the contact's ricochet connection address
[uniqid] is a large (>=128bit) random identifier
[filename] is the URL-encoded original name of the file

Only HTTP is permitted, no HTTPS. We do not want to require a TLS
implementation, and .onion makes it unnecessary.

Clients may refuse transfer URLs without a /ricochet/fetch/ prefix.

ํŒŒ์ผ URL์€ ํŠน์ • ์ „์†ก๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌ๊ฐœ๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋ฒ”์œ„ ์š”์ฒญ์ด ์ง€์›๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋ณ‘๋ ฌ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „์ฒด ์‚ฌ๋ณธ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด URL ์ œ๊ณต์„ ์ค‘๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ œ๊ณต ํ”„๋กœํ† ์ฝœ

ํŒŒ์ผ ์ œ์•ˆ์„ ํ™•์žฅ๋œ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

message ChatMessage {
    required string message_text = 1;
    optional uint32 message_id = 2;
    optional int64 time_delta = 3;

    // Indicates a file transfer offer. message_text must begin with a valid
    // file transfer URL, terminated by the first whitespace or end of message.
    // The rest of message_text, if any, should be displayed as a user message
    // along with the file. 
    optional FileInfo file_info = 4;
}

message FileInfo {
    // required
    optional string file_name = 1;
    optional uint64 file_size = 2;
    // optional
    optional string content_type = 3;
}

message ChatAcknowledge {
    optional uint32 message_id = 1;
    optional bool accepted = 2 [default = true];
    optional bool file_received = 3;
    optional bool file_refused = 4;
}

์ด ๋ฉ”์‹œ์ง€์˜ ํ™•์ธ์€ ํŒŒ์ผ ์ œ์•ˆ๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. URL์— ์ฆ‰์‹œ ์•ก์„ธ์Šคํ•˜์—ฌ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ˆ˜์‹ ์ž๋Š” ์ „์†ก์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๋œ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ํ•„๋“œ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ถ”๊ฐ€ ChatAcknowledge ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ์‹ ์ž๋Š” ์ด์ „ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ๋Œ€์ฒด ๋‹ค์šด๋กœ๋”๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ChatAcknowledge ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์†ก์ด ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํŒŒ์ผ ์ „์†ก์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์™„์ „ํžˆ ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊น”๋”ํ•œ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” URL์„ ๋ณด๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํŠน๋ณ„ํžˆ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

XXX ๋ฐœ์‹ ์ž๊ฐ€ ์ทจ์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์— ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

๋‚˜๋Š” ์ด ์ผ์„ ๊ฝค ๋นจ๋ฆฌ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ๊ณง ํ”„๋กœํ† ์ฝœ๊ณผ ์ฃผ์š” UX ๊ฒฐ์ •์„ ํ™•์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์ง€๋งŒ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ฒฐ์ •ํ•œ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒฌ์žˆ๋Š” ์‚ฌ๋žŒ?

๋ชจ๋“  11 ๋Œ“๊ธ€

์™€, ์ด๊ฒƒ์€ ์˜ค๋ž˜๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์™„๋ฃŒํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์ „์†ก์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋‚˜ ์ž์‹ ์„ ์„ค๋“ํ•˜๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋ธŒ๋ ˆ์ธ๋คํ”„์ด์ง€๋งŒ ์œ ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

UX

ํŒŒ์ผ ์ „์†ก์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑ ์‚ฌ์šฉ์ž ๋Š” ๋Œ€ํ™” ์ค‘์— ํŒŒ์ผ์„ ๋ณด๋‚ด๊ณ  ๋ฐ›์œผ๋ฉฐ ํŒŒ์ผ์ด ๋Œ€ํ™”์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์‚ญ์ œ ๋Š” ์˜จ๋ผ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์ฆ‰์‹œ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋”๋ผ๋„ ์–ธ์ œ๋“ ์ง€ ํŒŒ์ผ์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์†Œ์ˆ˜์˜ Ricochet ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์‹œ์ง• ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์šฐ๋ฆฌ ๋Š” ๋Œ€ํ™”์˜ ์ผ๋ถ€๋กœ ํŒŒ์ผ ์ „์†ก์„ ์ธ๋ผ์ธ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(๋ธŒ๋ผ์šฐ์ € ํฌํ•จ)์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ๋Œ€ํ™”๋กœ ๋Œ์–ด๋‹ค ๋†“๋Š” ๊ฒƒ์€ ํŒŒ์ผ์„ ๋ณด๋‚ด๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ‹€๋ฆผ์—†์ด ์ด๋Ÿฐ ์‹์œผ๋กœ ์‹ค์ˆ˜๋กœ ํŒŒ์ผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์„ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ์ƒ์ž์— ๋†“๊ณ  ๋ณด๋‚ด๊ธฐ ์ „์— ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋ณด๋‚ด๊ธฐ ์ „์— ์นด์šดํŠธ๋‹ค์šด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์‰ฝ๊ฒŒ ์ด๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ™” ํ—ค๋”์˜ ๋ฒ„ํŠผ์ด๋‚˜ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ๊ทผ์ฒ˜์— ํŒŒ์ผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ฐ€์‹œ์ ์ธ UI ๋ฉ”์„œ๋“œ ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ricochet-file-offer
ricochet-file-sending

์ œ๊ณต๋œ ํŒŒ์ผ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์žŠ์–ด๋ฒ„๋ ธ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ฐ€์ •ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„ ํ›„์—

Ricochet์˜ ์œ„ํ˜‘ ๋ชจ๋ธ์€ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ(ํŒŒ์ผ ํฌํ•จ)๋ฅผ ์ž๋™์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์œ„ํ˜‘ ๋ชจ๋ธ์€ ์—ฐ๋ฝ์ฒ˜๋ฅผ ์ž ์žฌ์ ์ธ ๊ณต๊ฒฉ์ž๋กœ ๊ฐ„์ฃผํ•˜๋ฏ€๋กœ ์—ฐ๋ฝ์ฒ˜๊ฐ€ ์‚ฌ์šฉ์ž ์Šน์ธ ์—†์ด ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ จ์˜ ์ž‘์—…์„ ์ค„์ด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŒŒ์ผ ์ „์†ก์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช…์‹œ์  ์ˆ˜๋ฝ์„ ์š”๊ตฌ ํ•ด์•ผ ํ•จ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋ณธ ์œ„์น˜๋ฅผ ๊ตฌ์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ฐ ํŒŒ์ผ์„ ์ €์žฅํ•  ์œ„์น˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ™œ์„ฑ ์‚ฌ์šฉ์ž ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํŒŒ์ผ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ์„ ์ž๋™์œผ๋กœ ์ €์žฅ ํ•˜๋Š” ํ•ฉ๋‹ˆ๋‹ค (์—ฐ๋ฝ์ฒ˜๋ณ„๋กœ๋„ ๊ฐ€๋Šฅ).

ricochet-file-offer-recipient
ricochet-file-receiving

ํ™œ์„ฑ ์ œ์•ˆ ๋˜๋Š” ์ „์†ก์€ ์–‘ ๋‹น์‚ฌ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ์—์„œ ์ „์†ก ๋Œ€ํ™” ํ—ค๋” (์ „์†ก ํƒญ?) ๋ฐ/๋˜๋Š” ์ „์—ญ ์ „์†ก ์ƒํƒœ์— ์ง„ํ–‰ ์ƒํ™ฉ์ด ์–ด๋”˜๊ฐ€์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ๋Œ€ํ™”๊ฐ€ ๊ณ„์† ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก์ด ์™„๋ฃŒ๋˜๋ฉด ๋Œ€ํ™” ์˜ ๋ ์œผ๋กœ

ricochet-file-conv-header

๋ธŒ๋ผ์šฐ์ € ๊ฒฝ๊ณ ์™€ ์œ ์‚ฌํ•œ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ์„ ํด๋ฆญํ•˜๋ฉด ์™„๋ฃŒ๋œ ์ „์†ก์ด

Tor๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฏ€๋กœ ์žฌ๊ฐœํ•˜๋Š” ๋Šฅ๋ ฅ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ธฐ์กด์˜ ๋ถˆ์™„์ „ํ•œ ํŒŒ์ผ ์œ„์— ์ €์žฅํ•˜์—ฌ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์–ด์•ผ

๋ฏธ๋ž˜์˜ UX

๋Œ€ํ™”์™€ ํ•จ๊ป˜ ์ธ๋ผ์ธ ์œผ๋กœ ์ด๋ฏธ์ง€ ๋””์ฝ”๋”๋ฅผ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ํŒŒ์ผ ์ „์†ก์ด ์™„๋ฃŒ๋˜๋ฉด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•ˆ์ „ํ•œ ๋””์ฝ”๋” ๋˜๋Š” ํ”Œ๋žซํผ ๊ฐ„ seccomp ์Šคํƒ€์ผ ์ƒŒ๋“œ๋ฐ•์‹ฑ์„ ์ฐพ์œผ๋ฉด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ ์–ด๋„ ์—ฐ๊ฒฐ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ์ œํ•œ๊นŒ์ง€ ๋ฒ„ํผ๋งํ•˜์—ฌ ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ ํ•˜์—ฌ ์ „์†ก ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋ณด์ด๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋˜๋Š” ์ „์ฒด ํด๋”์˜ ์ผ๊ด„ ์ „์†ก์„ ํ•ฉ๋ฆฌ์ ์ธ ํ•œ๋„๊นŒ์ง€ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ „์†ก ์„œ๋ฒ„์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ ์˜ ํ•ด์‹œ ๋ฅผ ์ž๋™์œผ๋กœ

๊ทœ์•ฝ

์‚ฌ์ด

ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋Š” Ricochet์˜ ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ทํ™”ํ•˜๋”๋ผ๋„ Tor ์ŠคํŠธ๋ฆผ์˜ ๋ฒ„ํผ๋ง ์†์„ฑ ๋•Œ๋ฌธ์— ์ˆจ๊ฒจ์ง„ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์ด ํ”Œ๋Ÿฌ๋”ฉ๋  ๋•Œ ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€๊ธฐ์—ด์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ๊ทน๋„์˜(์ข…์ข… 30์ดˆ ์ด์ƒ) ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์†๋„ ์ œ์–ด๋Š” ์ „์†ก ์†๋„์— ๋„ˆ๋ฌด ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ๋Œ€๋‹ต์€ ํ”ผ์–ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์„ ์—ฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์€ Tor์— ์˜ํ•ด ๋™์ผํ•œ ํšŒ๋กœ์— ๋‹ค์ค‘ํ™”๋˜์ง€๋งŒ ๋ฒ„ํผ๋ง ๋™์ž‘์€ ํ›จ์”ฌ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋™์ผํ•œ ํšŒ๋กœ์˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ”Œ๋Ÿฌ๋”ฉํ•  ๋•Œ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํšŒ๋กœ ๊ฒฉ๋ฆฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Tor๊ฐ€ ์ „์†ก์„ ์œ„ํ•œ ์ƒˆ ํšŒ๋กœ๋ฅผ ๊ตฌ์ถ•ํ•˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ฒ˜๋ฆฌ๋Ÿ‰์ด๋‚˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์— ์œ ์šฉํ•œ์ง€ ์—ฌ๋ถ€๋Š” ๋ถˆ๋ถ„๋ช…ํ•˜๋ฉฐ ์ถ”๊ฐ€ ๋™์‹œ ํšŒ์„ ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์ต๋ช…์„ฑ ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋ถ„์„์— ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์—ฌ๋ถ€๋„ ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Ricochet์˜ ํ”„๋กœํ† ์ฝœ์€ ์–ด๋–ค ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ชจํ˜ธํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ์ˆœ์„œ์— ๋Œ€ํ•œ ๊ธฐ๋Œ€์น˜๋ฅผ ์œ„๋ฐ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๋ฝ์ฒ˜๋‹น ๋‘˜ ์ด์ƒ์˜ ์ธ์ฆ๋œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์ด Ricochet์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์ด ๋ฐ์ดํ„ฐ ์ „์†ก์—๋งŒ ์‚ฌ์šฉ๋จ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅด๊ฒŒ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ „์†ก์€ 2์ฐจ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— Ricochet์˜ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ค์ง•ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์˜ต์…˜์„ ์ƒ๊ฐํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ 1: ์ˆ˜์ •๋œ Ricochet ํ”„๋กœํ† ์ฝœ

๋‚ด ์›๋ž˜ ์ƒ๊ฐ์€ ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์—์„œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•ด Ricochet์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์™„์ „ํžˆ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜œํƒ:

  • ํ”„๋กœํ† ์ฝœ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ธ๋ผ์ธ์œผ๋กœ ์ž‘์€ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ์กด ํ”„๋กœํ† ์ฝœ๊ณผ ๋” ์ผ์น˜
  • ์ƒˆ๋กœ์šด ํŒŒ์„œ/์„œ๋ฒ„ ๊ณต๊ฒฉ ํ‘œ๋ฉด ์—†์Œ

๋‹จ์ :

  • ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ธ์ฆ์ด ์ด์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋” ๊นŠ์€ ํ”„๋กœํ† ์ฝœ ์ˆ˜์ •์„ ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฐ์ดํ„ฐ๋Š” ํ—ค๋”๊ฐ€ ์žˆ๋Š” ์ตœ๋Œ€ 65kb ์ฒญํฌ๋กœ ๋ถ„ํ• ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

FileTransferChannel.proto ๋ฐ FileTransferDataChannel.proto ์˜ WIP ๋ถ„๊ธฐ์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์— ๋Œ€ํ•œ ์˜ค๋ž˜๋œ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ 2: HTTP(ํ˜„์žฌ ๊ธฐ๋ณธ ์„ค์ •)

Ricochet ํด๋ผ์ด์–ธํŠธ๋Š” OnionShare ์™€ ์œ ์‚ฌํ•œ ๊ฐ„๋‹จํ•œ ๋‚ด๋ถ€ ์„œ๋ฒ„์™€ ๊ณ ์œ ํ•œ URL์„ ์‚ฌ์šฉํ•˜์—ฌ HTTP๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ์ˆจ๊ฒจ์ง„ ์„œ๋น„์Šค, ์ƒˆ๋กœ์šด ์ž„์‹œ ์„œ๋น„์Šค์˜ ๋‹ค๋ฅธ(์ž„์˜์˜) ํฌํŠธ์— ์žˆ๊ฑฐ๋‚˜ ํ”„๋กœํ† ์ฝœ ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ํฌํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜œํƒ:

  • ๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ/ํ‘œ์ค€/๋ฏธ๋ž˜ ๋Œ€๋น„ ๊ตฌํ˜„
  • ์ˆ˜์‹ ์ž ์—ญํ˜ธํ™˜์„ฑ: URL ํ‘œ์‹œ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์‹ ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๊ธฐํƒ€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ
  • ์—ฐ๋ฝ์ฒ˜๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • ์•„์ฃผ ์ตœ์†Œํ•œ์˜ HTTP ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ผ๋„ ์—ฐ๋ฝ์ฒ˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ ํ‘œ๋ฉด์ž…๋‹ˆ๋‹ค.
  • ์–ด๋–ค C++/Qt ๊ตฌํ˜„์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์•ˆ์ „ํ•œ์ง€ ๋ถˆ๋ถ„๋ช…

์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„

์—ฌ๊ธฐ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋งค์šฐ ์ตœ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— Ricochet์—์„œ 100% ๊ธฐ๋Šฅ ์™„์ „ํ•˜๊ณ  ์‚ฌ์–‘ ๋™์ž‘ ํ˜ธํ™˜ HTTP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ•œ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„์„ _ํ•„์š”ํ•œ_ ๊ธฐ๋Šฅ์œผ๋กœ ์ œํ•œํ•˜๊ณ  (์˜ˆ: ์ฒญํฌ ์ „์†ก ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๋‚œํ•ดํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ Connection: close ๊ฐ•์ œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœ๋œ ์ฝ”๋“œ์˜ ์–‘์ด ๋งค์šฐ ์ ์œผ๋ฉฐ ์—ฌ์ „ํžˆ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๋™์ž‘ ๋ฐ URL ํ˜•์‹

๋™์ผํ•œ ์ˆจ๊ฒจ์ง„ ์„œ๋น„์Šค ์•„๋ž˜์˜ ์ž„์˜ ํฌํŠธ์— HTTP ์„œ๋ฒ„๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋•Œ๋•Œ๋กœ ๋Š๋ฆฌ๊ฑฐ๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋งŽ์€ ์ƒˆ๋กœ์šด ํšŒ๋กœ์™€ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ํ™œ๋™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ํ”ผ์–ด๊ฐ€ ์ž„์˜์˜ .onion์— ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๋™์ผํ•œ .onion ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰ ์ค‘์ด๋ฉด ์—ฐ๋ฝ์ฒ˜ ๋ฐ ๋น„ ์—ฐ๋ฝ์ฒ˜๊ฐ€ ์–ธ์ œ๋“ ์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๊ฐ€์น˜๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ํŒŒ์ผ ์ œ์•ˆ์ด ์žˆ์„ ๋•Œ๋งŒ ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ƒํƒœ๋Š” ํฌํŠธ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์—ฐ๋ฝ์ฒ˜ ๋˜๋Š” ๋น„์ ‘์ด‰์ž๊ฐ€ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ricochet ํด๋ผ์ด์–ธํŠธ ์ด์™ธ์˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ฐ€์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์œ ํšจํ•œ ํŒŒ์ผ ์š”์ฒญ์ด ์•„๋‹Œ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์˜ ๋ชจ๋“  ์š”์ฒญ์€ ์ผ๋ฐ˜ 404 ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ๊ฑฐ๋ถ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ URL์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

http://[address].onion:[port]/ricochet/fetch/[uniqid]/[filename]

[address] must be the contact's ricochet connection address
[uniqid] is a large (>=128bit) random identifier
[filename] is the URL-encoded original name of the file

Only HTTP is permitted, no HTTPS. We do not want to require a TLS
implementation, and .onion makes it unnecessary.

Clients may refuse transfer URLs without a /ricochet/fetch/ prefix.

ํŒŒ์ผ URL์€ ํŠน์ • ์ „์†ก๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌ๊ฐœ๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋ฒ”์œ„ ์š”์ฒญ์ด ์ง€์›๋˜์–ด์•ผ ํ•˜๋ฉฐ ๋ณ‘๋ ฌ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „์ฒด ์‚ฌ๋ณธ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด URL ์ œ๊ณต์„ ์ค‘๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ œ๊ณต ํ”„๋กœํ† ์ฝœ

ํŒŒ์ผ ์ œ์•ˆ์„ ํ™•์žฅ๋œ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

message ChatMessage {
    required string message_text = 1;
    optional uint32 message_id = 2;
    optional int64 time_delta = 3;

    // Indicates a file transfer offer. message_text must begin with a valid
    // file transfer URL, terminated by the first whitespace or end of message.
    // The rest of message_text, if any, should be displayed as a user message
    // along with the file. 
    optional FileInfo file_info = 4;
}

message FileInfo {
    // required
    optional string file_name = 1;
    optional uint64 file_size = 2;
    // optional
    optional string content_type = 3;
}

message ChatAcknowledge {
    optional uint32 message_id = 1;
    optional bool accepted = 2 [default = true];
    optional bool file_received = 3;
    optional bool file_refused = 4;
}

์ด ๋ฉ”์‹œ์ง€์˜ ํ™•์ธ์€ ํŒŒ์ผ ์ œ์•ˆ๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. URL์— ์ฆ‰์‹œ ์•ก์„ธ์Šคํ•˜์—ฌ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ˆ˜์‹ ์ž๋Š” ์ „์†ก์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๋œ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ํ•„๋“œ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ถ”๊ฐ€ ChatAcknowledge ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ์‹ ์ž๋Š” ์ด์ „ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ๋Œ€์ฒด ๋‹ค์šด๋กœ๋”๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ChatAcknowledge ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „์†ก์ด ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํŒŒ์ผ ์ „์†ก์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์™„์ „ํžˆ ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊น”๋”ํ•œ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” URL์„ ๋ณด๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํŠน๋ณ„ํžˆ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

XXX ๋ฐœ์‹ ์ž๊ฐ€ ์ทจ์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์— ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

๋‚˜๋Š” ์ด ์ผ์„ ๊ฝค ๋นจ๋ฆฌ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ๊ณง ํ”„๋กœํ† ์ฝœ๊ณผ ์ฃผ์š” UX ๊ฒฐ์ •์„ ํ™•์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์ง€๋งŒ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ฒฐ์ •ํ•œ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒฌ์žˆ๋Š” ์‚ฌ๋žŒ?

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ข‹์•„ ๋ณด์ธ๋‹ค. HTTP ์„œ๋ฒ„ ๋ฐฉํ–ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋Š๊ปด์ง„๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

ํŠน๋ณ„ํ•œ ์ˆœ์„œ๋‚˜ ์šฐ์„ ์ˆœ์œ„ ์—†์ด ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ:

  • ๋‹ค์šด๋กœ๋“œ ์‹œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์ด ์—†์œผ๋ฉด ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ณต๊ฒฉ ๋ฒกํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์œ„ํ˜‘ ๋ชจ๋ธ์— ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์ง€๋งŒ... ์ฐธ๊ณ ๋กœ ๋‹ค์Œ์€ ๋‚ด ๋งˆ์Œ์„ ์‚ฌ๋กœ์žก์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

    • ๊ณต๊ฒฉ์ž๊ฐ€ ํ”ผํ•ด์ž์—๊ฒŒ ํŒŒ์ผ์„ ์ œ๊ณตํ•œ ๋‹ค์Œ ๊ณต๊ฒฉ์ž ์ž์‹ ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ ํ’€์„ ์—ด์–ด ์ฑ„์šฐ๋„๋ก ํ•˜๋Š” DoS/slowloris ์œ ํ˜• ๊ณต๊ฒฉ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

    • ๊ณต๊ฒฉ์ž๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋„๋ก ํ•œ ๋‹ค์Œ ์ž์‹ ์ด ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์žˆ์Œ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ๊ณต๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

  • ํŒŒ์ผ ์ด๋ฆ„ ๋ฐ ์ฝ˜ํ…์ธ  ์œ ํ˜•์€ #338์—์„œ ์‹๋ณ„๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” HTTP ๋ฆฌ๋””๋ ‰์…˜ ๋ฐ HTTP ์ŠคํŠธ๋ฆผ์„ ๊ฐ€๋กœ์ฑ„๋ ค๋Š” ๊ธฐํƒ€ ์‹œ๋„๋ฅผ ๊ฑฐ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž˜๋ชป๋œ URL์€ 404๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ ๋‹ซ๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํŒŒ์ผ ์ „์†ก์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์™„์ „ํžˆ ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊น”๋”ํ•œ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” URL์„ ๋ณด๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๊ฒƒ์€ ricochet http ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•  ์ˆ˜ ์—†๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ณต๊ฒฉ ๋ฒกํ„ฐ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ๋งํฌ ์—ด๊ธฐ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ด๋ฏธ ์žˆ์ง€๋งŒ ํŒŒ์ผ ์ „์†ก์˜ ๋ฉ”์‹œ์ง• ๋ฐ ์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ ์ƒํƒœ๊ฐ€ ํ”ผ์‹ฑ์— ๋Œ€ํ•œ ๊ท ์—ด์„ ์—ด ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์šด๋กœ๋“œ ์‹œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์ด ์—†์œผ๋ฉด ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ณต๊ฒฉ ๋ฒกํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์œ„ํ˜‘ ๋ชจ๋ธ์— ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์ง€๋งŒ... ์ฐธ๊ณ ๋กœ ๋‹ค์Œ์€ ๋‚ด ๋งˆ์Œ์„ ์‚ฌ๋กœ์žก์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

๋ญ, ๋ฐ›๋Š” ์‚ฌ๋žŒ๊ณผ ํŒŒ์ผ์— ๊ณ ์œ ํ•œ URL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ „์†ก ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ธ์ฆ์€ ๋ฐœ์‹ ์ž ์ด์™ธ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ˆ˜์‹ ์ž๋ฅผ ์‹๋ณ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ(๋น„์•”ํ˜ธํ™” ๋ฐฉ์‹์œผ๋กœ) ์ˆ˜์‹ ์ž๊ฐ€ ๋ณดํ˜ธํ•˜๊ณ ์ž ํ•˜๋Š” ๋น„๋ฐ€์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ณต๊ฒฉ์ž๊ฐ€ ํ”ผํ•ด์ž์—๊ฒŒ ํŒŒ์ผ์„ ์ œ๊ณตํ•œ ๋‹ค์Œ ๊ณต๊ฒฉ์ž ์ž์‹ ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ ํ’€์„ ์—ด์–ด ์ฑ„์šฐ๋„๋ก ํ•˜๋Š” DoS/slowloris ์œ ํ˜• ๊ณต๊ฒฉ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ œ๊ณต๋˜๋Š” ํŒŒ์ผ๋‹น ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ํ•œ DoS ์˜ต์…˜์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ํ•œ ์‚ฌ๋žŒ๊ณผ ํ•œ ๋ฒˆ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ฏ€๋กœ(์ด๋ ฅ์„œ ๋ฐ ๊ธฐํƒ€ ๋ฌธ์ œ ํ—ˆ์šฉ) ์—„๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด ์ตœ์†Œ ์ „์†ก ์†๋„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • ๊ณต๊ฒฉ์ž๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋„๋ก ํ•œ ๋‹ค์Œ ์ž์‹ ์ด ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์žˆ์Œ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ๊ณต๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํฅ๋ฏธ๋กœ์šด! ๋‚˜๋Š” ์ด ๊ณต๊ฒฉ์„ ์ข‹์•„ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์•ฝํ•œ ๋ฐฉ์–ด๊ฐ€ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” URL ๊ณต์œ ๋ฅผ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ์ด๋Ÿฌํ•œ URL์„ ์ƒ์„ฑํ•œ ๋ฐœ์‹ ์ธ ์ด์™ธ์˜ ์˜๋„๋œ ์ˆ˜์‹ ์ž๋ฅผ ์‹๋ณ„ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์•”ํ˜ธํ™” ์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์ž„์‹œ ์„œ๋น„์Šค์—์„œ ํŒŒ์ผ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. _contact_๋‹น ํ•˜๋‚˜์˜ ์ž„์‹œ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋„ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ Bob์€ Alice์—๊ฒŒ ์œ„ํ—˜ํ•œ ํŒŒ์ผ์„ ๋ณด๋‚ด๋„๋ก ์„ค๋“ํ•  ์ˆ˜ ์žˆ๊ณ  Bob์€ Carol๊ณผ ์ฃผ์†Œ๋ฅผ ๊ณต์œ ํ•œ ๋‹ค์Œ Carol์€ ๊ฐœ๋ณ„์ ์œผ๋กœ Alice๊ฐ€ ๋ฌดํ•ดํ•œ ํŒŒ์ผ์„ ๋ณด๋‚ด๋„๋ก ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Carol์€ ์œ„ํ—˜ํ•œ URL์ด Alice๋กœ๋ถ€ํ„ฐ ์˜จ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ดํŠธ๋ฆฌ๋ทฐ์…˜๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๋‹ต๋ณ€์€ ์„ธ์…˜๋‹น ์—ฐ๋ฝ์ฒ˜๋ณ„๋กœ ๊ณ ์œ ํ•œ ์ž„์‹œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋‚˜์˜ ์šฐ๋ ค๋Š” 1) ์„œ๋น„์Šค ๊ฒŒ์‹œ ์ง€์—ฐ์ž…๋‹ˆ๋‹ค. 2) _๋งŽ์€_ ๋” ๋งŽ์€ ํšŒ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 3) ํŠธ๋ž˜ํ”ฝ ๋ถ„์„์— ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์„ธ์…˜์˜ ๋ชจ๋“  ํŒŒ์ผ ์ „์†ก์— ํ•˜๋‚˜์˜ ์ž„์‹œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์—ฌ์ „ํžˆ ์•”ํ˜ธํ•™์ ์œผ๋กœ ๊ตฌ๋ณ„๋˜๊ณ  ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์˜ํ–ฅ์„ ์ค„์ด๋ฉฐ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํŒŒ์ผ ์ด๋ฆ„ ๋ฐ ์ฝ˜ํ…์ธ  ์œ ํ˜•์€ #338์—์„œ ์‹๋ณ„๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์ฝ˜ํ…์ธ  ์œ ํ˜•์€ MIME ์œ ํ˜•์ด๋ฏ€๋กœ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” ์˜ค๋ž˜ ์ „์— ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™์„ ์ƒ๊ฐํ•ด ๋ƒˆ์œผ๋ฉฐ, ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์ข€ ๋” ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ๋งค์šฐ ์กฐ์‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” HTTP ๋ฆฌ๋””๋ ‰์…˜ ๋ฐ HTTP ์ŠคํŠธ๋ฆผ์„ ๊ฐ€๋กœ์ฑ„๋ ค๋Š” ๊ธฐํƒ€ ์‹œ๋„๋ฅผ ๊ฑฐ๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์˜ํ•˜๋‹ค.

  • ์ž˜๋ชป๋œ URL์€ 404๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ ๋‹ซ๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋ฌด ๋ฐ˜์‘๋„ ์—†์ด? ํ . ์ด๋กœ ์ธํ•ด ricochet ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ๋˜๋Š” URL์ด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๋” ๋ชจํ˜ธํ•ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ์Šน์ธ๋˜์ง€ ์•Š์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•„๋ฌด ๊ฒƒ๋„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํŒŒ์ผ ์ „์†ก์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์™„์ „ํžˆ ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊น”๋”ํ•œ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” URL์„ ๋ณด๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๊ฒƒ์€ ricochet http ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•  ์ˆ˜ ์—†๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ณต๊ฒฉ ๋ฒกํ„ฐ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ๋งํฌ ์—ด๊ธฐ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ด๋ฏธ ์žˆ์ง€๋งŒ ํŒŒ์ผ ์ „์†ก์˜ ๋ฉ”์‹œ์ง• ๋ฐ ์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ ์ƒํƒœ๊ฐ€ ํ”ผ์‹ฑ์— ๋Œ€ํ•œ ๊ท ์—ด์„ ์—ด ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜์‚ฌํ•ญ์€ URL์„ ์—ฌ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ ๋””์ž์ธํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์œ ์Šค ์ผ€์ด์Šค๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ์—๋Š” ๊ณ„์† ๋‚จ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค C++/Qt ๊ตฌํ˜„์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์•ˆ์ „ํ•œ์ง€ ๋ถˆ๋ถ„๋ช…

์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋Š” ์ด๋ฏธ ๋„ˆ๋ฌด ํฌ์ง€๋งŒ ๋ณด์•ˆ์„ ์—ผ๋‘์— ๋‘๊ณ  ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/reyk/httpd

message FileInfo {
    // required
    optional string file_name = 1;
    optional uint64 file_size = 2;
    // optional
    optional string content_type = 3;
}

์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ด๋ฆ„ ํ™•์žฅ์ž์™€ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ์ €์žฅํ•˜๋ ค๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ• ์ง€ ๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์—์„œ ๋น„๊ธฐ์ˆ ์ ์œผ๋กœ ์ˆ˜์‹ ๊ธฐ ์ธก์—์„œ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

XXX ๋ฐœ์‹ ์ž๊ฐ€ ์ทจ์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์— ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ChatAcknowledge ๋ฉ”์‹œ์ง€์˜ bool file_refused ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํŒŒ์ผ์ด ์Šน์ธ๋œ ํ›„ ์ „์†ก ์ค‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์ž˜๋ชป๋œ URL์€ 404๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ ๋‹ซ๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘

ํฅ๋ฏธ๋กœ์šด! ๋‚˜๋Š” ์ด ๊ณต๊ฒฉ์„ ์ข‹์•„ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์•ฝํ•œ ๋ฐฉ์–ด๊ฐ€ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” URL ๊ณต์œ ๋ฅผ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ์ด๋Ÿฌํ•œ URL์„ ์ƒ์„ฑํ•œ ๋ฐœ์‹ ์ธ ์ด์™ธ์˜ ์˜๋„๋œ ์ˆ˜์‹ ์ž๋ฅผ ์‹๋ณ„ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ํ˜ธํ™˜์„ฑ์„ ํฌ์ƒํ•˜๋ฉด์„œ ์ˆ˜์‹ ์ž ๊ณต๊ฐœ ํ‚ค๋‚˜ ์„ธ์…˜ ID๋กœ ํŒŒ์ผ ๋‚ด์šฉ์„ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ด๋ฆ„ ํ™•์žฅ์ž์™€ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ์ €์žฅํ•˜๋ ค๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ• ์ง€ ๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์—์„œ ๋น„๊ธฐ์ˆ ์ ์œผ๋กœ ์ˆ˜์‹ ๊ธฐ ์ธก์—์„œ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ . ๋‘ ๊ฐ€์ง€ ์šฉ๋„๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ธ๋ผ์ธ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์–ด๋–ค ํŒŒ์ผ์ด ์ด๋ฏธ์ง€์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ผ๋ถ€ ํŒŒ์ผ ํ˜•์‹(์ด๋ฏธ์ง€/, ๋น„๋””์˜ค/ ๋“ฑ)์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ™•์žฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์ ์–ด๋„ (์ž˜๋ชป๋œ) ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ๊ฐ–๋Š” ๊ฒƒ๋งŒํผ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์—ด๋ฆด ๋•Œ ์ด๋ฏธ์ง€๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š๋„๋ก #2์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋งŒ์œผ๋กœ๋„ ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ์ œ๊ฑฐํ•˜๊ณ  ํ™•์žฅ์ž์— ์˜ํ•ด์„œ๋งŒ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ ..

XXX ๋ฐœ์‹ ์ž๊ฐ€ ์ทจ์†Œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์— ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ChatAcknowledge ๋ฉ”์‹œ์ง€์˜ bool file_refused ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํŒŒ์ผ์ด ์Šน์ธ๋œ ํ›„ ์ „์†ก ์ค‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋ฐ›์€ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ChatAcknowledge ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ file_refused ๋Š” ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ณด๋‚ธ ์‚ฌ๋žŒ์ด "์ด ํŒŒ์ผ์„ ๋” ์ด์ƒ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋™๋“ฑํ•œ ๋ฐฉ๋ฒ•์„ ์•„์ง ์ •์˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ํ˜ธํ™˜์„ฑ์„ ํฌ์ƒํ•˜๋ฉด์„œ ์ˆ˜์‹ ์ž ๊ณต๊ฐœ ํ‚ค๋‚˜ ์„ธ์…˜ ID๋กœ ํŒŒ์ผ ๋‚ด์šฉ์„ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

ํŒŒ์ผ์„ ์•”ํ˜ธํ™”ํ•œ๋‹ค๊ณ  @s-rah์˜ ์†์„ฑ ๊ณต๊ฒฉ์ด ํ•ด๊ฒฐ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” URL๊ณผ ํ•จ๊ป˜ ์•”ํ˜ธ ํ•ด๋… ํ‚ค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ˆ˜์‹ ์ž์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋Œ€์นญ ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ๋ž˜ํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด๋‚ธ ์‚ฌ๋žŒ์ด ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Œ์„ ์ž…์ฆํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์‹ ์› ๊ฐœ์ธ ํ‚ค๋ฅผ ํฌ๊ธฐํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ ์ „์— ์ˆ˜์‹ ์ž์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ์—ฐ๊ฒฐ์„ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ HTTP์— ์ž˜ ๋งคํ•‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์•„๋‹ˆ์š”, TLS ์—†์Œ). ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•˜๋Š” ํฌ์ธํŠธ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™„์ „ํžˆ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ˆ˜์‹ ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŠธํ•˜๊ณ  ๋ฐœ์‹ ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ HTTP ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์œ ์—ฐ์„ฑ์— ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ท€์† ๋ฌธ์ œ๋Š” ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ๋ผ์ธ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์–ด๋–ค ํŒŒ์ผ์ด ์ด๋ฏธ์ง€์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ด์ „ ์ง„์ˆ  I don't trust image decoders ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ž์‹ ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ๋‚˜์œ, ์‹ค์ œ๋กœ "๋ฐœ์‹ ์ž"๋ผ๊ณ  ํ‘œ์‹œ๋˜๋Š” ๋™์•ˆ "์ˆ˜์‹ ์ž"๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. :)

๋ณด๋‚ธ ์‚ฌ๋žŒ์ด ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Œ์„ ์ž…์ฆํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์‹ ์› ๊ฐœ์ธ ํ‚ค๋ฅผ ํฌ๊ธฐํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ ์ „์— ์ˆ˜์‹ ์ž์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ์—ฐ๊ฒฐ์„ ์ธ์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ HTTP์— ์ž˜ ๋งคํ•‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์•„๋‹ˆ์š”, TLS ์—†์Œ).

ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์˜ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜๋Š” ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋…ธ์ด์ฆˆ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” https://github.com/ricochet-im/ricochet/issues/72#issuecomment -258894126์— ์–ธ๊ธ‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๊ธฐ์—์„œ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ๋นจ๋ฆฌ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์€ ๋ฆฌ์ฝ”์…ฐ ์™€ ํ•จ๊ป˜

-----PGP ์„œ๋ช… ๋ฉ”์‹œ์ง€ ์‹œ์ž‘-----
ํ•ด์‹œ: SHA512

์กด ๋ธŒ๋ฃฉ์Šค:

HTTP๋งŒ ํ—ˆ์šฉ๋˜๊ณ  HTTPS๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” TLS๋ฅผ ์š”๊ตฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค
๊ตฌํ˜„ํ•˜๊ณ  .onion์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด Ricochet์˜ ์œ„ํ˜‘ ๋ชจ๋ธ์˜ ์ผ๋ถ€์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Whonix์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ Tor ํด๋ผ์ด์–ธํŠธ๋Š” ๋‚ด์šฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
.onion ํŠธ๋ž˜ํ”ฝ์ด ์•„๋‹Œ TLS ํŠธ๋ž˜ํ”ฝ(TLS๋Š”
๋‹ค๋ฅธ VM).
-----PGP ์„œ๋ช… ์‹œ์ž‘-----

iQIcBAEBCgAGBQJYKlGYAAoJELPy0WV4bWVwu/gQAI/7bmPTKwbcsjEntuEjc03j
nQFKDvSMg05FXR9rljFym5E++pr1FEteKb2qAu0Gub9CbkxCWhibBYNQHi1aFgy5
wgO07yom0oJI4JxBXA185TNSJKE7+LnDAqUCT0H1d0yCy5t4TZfFQHJFLdhOjdk+
GD+Lbuv3pH0GIInsK7iAFQlps0bQmI8aNrNAgoiuk3iWI9MqGFZ8BoXZlabMeGnF
O0OeaibMjtvtuvX4mRsgTFZdNzzUmSfmkoYsABHDK/He4rcnUg6LUetVz16YKzuo
i5Oxy+dQZ6FHHICsQq2Ajg35LfW95I27jcm0QBGFZ08tu3Igt7DFqw9Sq1Ydg5Hl
J/HckRIA5pIJJUcOUa4ynFyk2t/hA0fQEjSoy9C66GnH4Fzt6X/Izs0CDkPkZOQ/
+Vo7wYkqyKcInn2uu7sb62lopX7L6QKHMORiO/5echUMCNCs5fVx7pDenIKvXew
88QcZ/UkR48N9RdKaNC+UdCt3a/vJzQhbzB65cgGuPtvJLhUPFay2IK/szP0/Drw
gPXT+kwbCcBKqbmzkniPysn0Z62wXOlZAfiI/BJ5TqbqILNlhyR9HFSb9MIImiNL
Es+Q3vteUEm6pGVGPnqMZMm2dxVYmP5xx3pHhqq7GjaeGplNEi0ZwTsmSpfCztPB
Y6ksrSAXNDadT0ijrXfu
=TeTg
-----๋ PGP ์„œ๋ช…-----

๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์ตœ์†Œํ•œ Windows ๋ฐ Linux์—๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์•”ํ˜ธํ™”๋œ ๋ชจ๋“  ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ์ž์ฒด ํฌํ•จ GPG ํ”„๋กœ๊ทธ๋žจ์ธ gpg4usb(gpg4usb.org)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒํ˜ธ ์ž‘์šฉ:
2016-12-08 19_14_58-encrypt file

์ถœ๋ ฅ(๋ฉ”๋ชจ์žฅ์—์„œ _data.docx.asc_ ์—ด๊ธฐ):
2016-12-08 19_08_13-data docx asc - notepad

ํ•จ์ •:

  • ๋Š๋‹ค? ๋‚˜๋Š” Ricochet์„ ํ†ตํ•ด ๋งค์šฐ ๊ธด ํ…์ŠคํŠธ ๋น„ํŠธ๋ฅผ ๋ณด๋ƒˆ์ง€๋งŒ ์–ด๋Š ์‹œ์ ์—์„œ ์ž˜๋ฆฐ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์ฒญํฌ๋กœ ๋ณด๋‚ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ผ์ด ์›๋ณธ๋ณด๋‹ค
  • GPG๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ( ์œ„์˜

์—…๋ฐ์ดํŠธ: ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ GPG๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ๊ทผ์— ์—…๋ฐ์ดํŠธ๋œ ๋‹ค๋ฅธ GPG ํ˜ธํ™˜ ๋„๊ตฌ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1) ํŒŒ์ผ ์ „์†ก ๊ธฐ๋Šฅ์€ ์‹ค์ œ ์ž‘์—… ํ™˜๊ฒฝ์—์„œ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์—…๋ฌด์ƒ์˜ ์ด์œ ๋กœ ์ €๋Š” ์ž์ฃผ ์ด๋™ํ•˜๊ณ  ๋™๋ฃŒ์™€ ๋ฉ”์‹œ์ง€ ๋ฐ ํŒŒ์ผ์„ ๊ตํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋“œ๋ฌผ๊ฒŒ ์ด๋ฏธ์ง€, ๋Œ€๋ถ€๋ถ„์˜ .docx, xls ๋ฐ ๊ธฐํƒ€ ํŒŒ์ผ ํ˜•์‹). ๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ์•ˆ์ „ํ•˜๊ณ  ์˜ˆ์•ฝ๋œ ์ฑ„๋„์—์„œ ์ด๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ์„ ์˜๋„ํ•œ ์ˆ˜์‹ ์ž ์ด์™ธ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ€๋กœ์ฑ„๊ฑฐ๋‚˜ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(n.1 ์š”์ฒญ).
๊ทธ๋ž˜์„œ ์ €๋Š” ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋ณผ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์‰ฝ๊ฒŒ ํŒŒ์ƒ๋  ์ˆ˜ ์žˆ๋Š”(๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์–‘๋„ ๊ฐ€๋Šฅํ•œ) ๊ณต๊ฐœ URL(์Šคํฌ๋žจ๋ธ”๋˜๊ฑฐ๋‚˜ ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ์žˆ๋”๋ผ๋„)์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ ˆ๋Œ€์ ์œผ๋กœ ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™” ๋‚ด์šฉ๊ณผ ํŒŒ์ผ์€ ๋ณด๋‚ธ ์‚ฌ๋žŒ๊ณผ ๋ฐ›๋Š” ์‚ฌ๋žŒ ์‚ฌ์ด์—์„œ ์—„๊ฒฉํ•˜๊ฒŒ ๋น„๊ณต๊ฐœ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ˆœ์ˆ˜ํ•œ P2P์ด๋ฉฐ ๊ณต์œ ํ•˜์ง€ ์•Š์Œ).
'๊ณต๊ฐœ' URL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜์‹ ์ž ์ž์ฒด์—์„œ ์˜ค๋Š” ๊ฒฝ์šฐ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” "๊ณต๊ฒฉ" ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

์ถฉ์„ฑ์Šค๋Ÿฝ์ง€ ์•Š์€ ์ง์›์ด ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์•Œ๊ณ  ๋‹ค๋ฅธ ์ฑ„๋„(์ž์ทจ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ๋‘ ๋ฒˆ์งธ Ricochet IM ์ฑ„ํŒ…์ผ ์ˆ˜๋„ ์žˆ์Œ)์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. URL์„ ๋ฐ›์ž๋งˆ์ž ์ œ3์ž์—๊ฒŒ... ์ œ 3์ž๊ฐ€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ง์›๋„ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์•„๋ฌด ์ž˜๋ชป๋„ ์—†๋Š” ์ฒ™ํ•ฉ๋‹ˆ๋‹ค... ๊ณต๊ฐœ/ํ‘œ์‹œ/๋ณต์‚ฌ ๊ฐ€๋Šฅํ•œ ๋งํฌ๊ฐ€ ์—†๋Š” ์‹œ์Šคํ…œ์—์„œ ์ฑ„ํŒ… ์ฐฝ์—์„œ ๋ฐ›๋Š” ์œ ์ผํ•œ ์˜ต์…˜์€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์ž์‹ ์˜ PC๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ(๋ณด๋‚ธ ์‚ฌ๋žŒ ์ œ์™ธ)์ด๋ฉฐ ์œ ์ถœ๋œ ๊ฒฝ์šฐ '๊ณต๊ฐœ http URL....

2) ์ด๋ฏธ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด P2P ํŒŒ์ผ ์ „์†ก์„ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ์ฑ„ํŒ… ์†”๋ฃจ์…˜์„ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์ด ์˜ต์…˜์ด ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ํ˜„์žฅ์—์„œ QTox๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ฑ„ํŒ…์— ์™„์ „ํžˆ ํฌํ•จ๋œ ์ž‘๋™ํ•˜๊ณ  ๋ฉ‹์ง„ ํŒŒ์ผ ์ „์†ก ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
(๊ณผ๊ฑฐ์—๋Š” uVNC๋„ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ p2p ๋ณด์•ˆ ํ„ฐ๋„์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํŒŒ์ผ์„ ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค)

3) ๋‚ด ์˜ˆ์ „ ์Šคํƒ€์ผ์˜ ์ง๊ฐ์€ http ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๊ธฐ์กด์˜ ๊ฐ์‚ฌ๋˜๊ณ  ์•ˆ์ „ํ•˜๋ฉฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ricochet ํ”„๋กœํ† ์ฝœ๋กœ ํŒŒ์ผ์˜ ํšจ์œจ์ ์ธ ํŒจํ‚ทํ™” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ์ž‘์€ ์ˆ˜์ • ๋ฐ ์„ ํƒ์  ์ถ”๊ฐ€ ๋‹จ์ˆœ ์•”ํ˜ธํ™” ๋ ˆ์ด์–ด ํฌํ•จ) , ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ.
๋‹จ์ˆœํžˆ Mime64+a ๋ผ์ดํŠธ ์Šคํฌ๋žจ๋ธ”๋ง์œผ๋กœ ํŒŒ์ผ์„ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ž˜ํผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋” ๋ฉ‹์ง€๊ณ  ๋น ๋ฅธ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜๋ณด๋‹ค ๋‚ด ํŒŒ์ผ์ด ๊ฒฝ์Ÿ์ž์˜ ์†์— ๋“ค์–ด๊ฐˆ ์œ„ํ—˜์ด ์—†๋Š” ๋ณด์•ˆ๊ณผ ํ™•์‹ค์„ฑ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

4) ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ ์ด๋ฉ”์ผ(์ฒจ๋ถ€ ํŒŒ์ผ์˜ MIME-64 ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ธ์ฝ”๋”ฉ)์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ „์†กํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋Š๋ฆฌ๊ณ  ๋น„ํšจ์œจ์ ์ด๋ฉฐ ํ™•์‹คํžˆ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ตœ๊ณ  ์†๋„๋Š” ์‹ค์ œ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ์ „์†ก์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด ์•„๋‹™๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์›๊ฒฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ถ€ ๋ชจ๋ฐ”์ผ ์—ฐ๊ฒฐ์€ ์–ด์จŒ๋“  ์—„์ฒญ๋‚œ ์†๋„๋ฅผ ์ง€์›ํ•  ์ˆ˜์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค...).
๋‚˜์—๊ฒŒ๋Š” ๋™๋ฃŒ์— ๋Œ€ํ•œ ์ „์†ก ์ƒํƒœ ํ‘œ์‹œ๊ธฐ๊ฐ€ ์žˆ๊ณ , ๊ธด ํŒŒ์ผ ์ „์†ก์„ '์ผ์‹œ ์ค‘์ง€/์žฌ๊ฐœ'ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ๊ณผ ์—ฐ๊ฒฐ ๋Š๊น€์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ) ์ง„ํ–‰ ์ค‘์ธ ์ „์†ก๊ณผ ํ•จ๊ป˜.

@nogoest์˜ Onionize ( Golang ์œผ๋กœ ์ž‘์„ฑ)๋ผ๋Š” ์ž‘๊ณ  ๊ฐ€๋ฒผ์šด Tor Hidden Service ๊ธฐ๋ฐ˜ ํŒŒ์ผ ๊ณต์œ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ๋ฉ”์‹ ์ € + ํŒŒ์ผ ๊ณต์œ  ์ž์†์„ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค ;)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰