1.24๋กœ ์ด๋™

1.24๋กœ ์ด๋™

Go ์–ธ์–ด์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค์ธ ๋ฒ„์ „ 1.24๊ฐ€ ์ถœ์‹œ๋œ ์ง€ XNUMX๊ฐœ์›” ํ›„์ž…๋‹ˆ๋‹ค. 1.23๋กœ ์ด๋™. ๋Œ€๋ถ€๋ถ„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํˆด์ฒด์ธ, ๋Ÿฐํƒ€์ž„, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌํ˜„์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜์„ฑ์˜ ์•ฝ์† Go 1. ์–ธ์–ด ์„ค๊ณ„์ž๋“ค์€ ๊ฑฐ์˜ ๋ชจ๋“  Go ํ”„๋กœ๊ทธ๋žจ์ด ์ด์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์–ธ์–ด ๋ณ€๊ฒฝ

Go 1.24๋Š” ์ด์ œ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ˜•์‹ ๋ณ„์นญ: ํ˜•์‹ ๋ณ„์นญ์€ ์„ ์–ธ๋œ ํ˜•์‹์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์–ธ์–ด ์‚ฌ์–‘. ํ˜„์žฌ ์ด ๊ธฐ๋Šฅ์€ GOEXPERIMENT=noaliastypeparams๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ aliastypeparams ์˜ต์…˜์€ Go 1.25์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ

Go ๋ช…๋ น

Go ๋ชจ๋“ˆ์€ ์ด์ œ go.mod์˜ ๋„๊ตฌ ์ง€์นจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํŒŒ์ผ ์ข…์†์„ฑ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ "tools.go"๋ผ๋Š” ํŒŒ์ผ์— ๋นˆ ๊ฐ€์ ธ์˜ค๊ธฐ๋กœ ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ด์ „ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š” ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ go tool ๋ช…๋ น์€ Go์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋„๊ตฌ ์™ธ์—๋„ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.

go get์˜ ์ƒˆ๋กœ์šด -tool ํ”Œ๋ž˜๊ทธ๋Š” require ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ง€์ •๋œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋„๊ตฌ ์ง€์‹œ๋ฌธ์„ ํ˜„์žฌ ๋ชจ๋“ˆ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฉ”ํƒ€ ํŒจํ„ด ๋„๊ตฌ ํ˜„์žฌ ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ๋„๊ตฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด go get ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ณ , go install ๋„๊ตฌ๋ฅผ ํ†ตํ•ด GOBIN ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ญ๋ชฉ์„ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

go run๊ณผ ์ƒˆ๋กœ์šด go ๋„๊ตฌ ๋™์ž‘์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์‹คํ–‰ ํŒŒ์ผ์€ ์ด์ œ Go ๋นŒ๋“œ ์บ์‹œ์— ์บ์‹œ๋ฉ๋‹ˆ๋‹ค. ์บ์‹œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ๋ฐ˜๋ณต์ ์ธ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. #69290.

go build ๋ฐ go install ๋ช…๋ น์€ ์ด์ œ -json ํ”Œ๋ž˜๊ทธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๋นŒ๋“œ ์ถœ๋ ฅ๊ณผ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์ค€ ์ถœ๋ ฅ์— ๊ตฌ์กฐํ™”๋œ JSON ์ถœ๋ ฅ์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ go help buildjson์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, go test -json ์€ ์ด์ œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ JSON๊ณผ ํ˜ผํ•ฉํ•˜์—ฌ ์ถœ๋ ฅ ๋ฐ ๋นŒ๋“œ ์˜ค๋ฅ˜๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ž‘์—… ์œ ํ˜•์œผ๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ ํ†ตํ•ฉ ์‹œ์Šคํ…œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋นŒ๋“œ์˜ ํ…์ŠคํŠธ ์ถœ๋ ฅ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GODEBUG ์„ค์ • getestjsonbuildtext=1.

์ƒˆ๋กœ์šด GOAUTH ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๊ฐœ์ธ ๋ชจ๋“ˆ ํ’€์„ ์Šน์ธํ•˜๋Š” ์œ ์—ฐํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ go help goauth์—์„œ ํ™•์ธํ•˜์„ธ์š”.

go build ๋ช…๋ น์ด ์ด์ œ ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ๋ชจ๋“ˆ์˜ ๋ฒ„์ „ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ํƒœ๊ทธ ๋ฐ/๋˜๋Š” ๋ฒ„์ „ ์ œ์–ด ์ปค๋ฐ‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ +dirty ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. -buildvcs=false ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ๋ฒ„์ „ ์ œ์–ด ์ •๋ณด๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด GODEBUG ์„ค์ • ํˆด์ฒด์ธ ์ถ”์ =1 ์ด์ œ go ๋ช…๋ น์—์„œ ํˆด์ฒด์ธ ์„ ํƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cgo

Cgo๋Š” ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด C ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ฃผ์„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. #cgo noescape cFunctionName์€ C ํ•จ์ˆ˜ cFunctionName์— ์ „๋‹ฌ๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ด์Šค์ผ€์ดํ”„๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. #cgo nocallback cFunctionName์€ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ C ํ•จ์ˆ˜ cFunctionName์ด ์–ด๋–ค Go ํ•จ์ˆ˜๋„ ์ฝœ๋ฐฑํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. cgo ๋ฌธ์„œ.

Cgo๋Š” ํ˜„์žฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์„ ์–ธ์ด ์žˆ๋Š” C ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, f๊ฐ€ void f(int)์™€ void f(double)๋กœ ๋ชจ๋‘ ์„ ์–ธ๋œ ๊ฒฝ์šฐ cgo๋Š” ์ž˜๋ชป๋œ ํ˜ธ์ถœ ์‹œํ€€์Šค f(0)์„ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ์— ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์„ ์–ธ์ด ๋‚˜ํƒ€๋‚  ๋•Œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ๊ฐ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. #67699.

์˜ค๋ธŒ์ œ๋คํ”„

objdump ๋„๊ตฌ๋Š” ์ด์ œ 64๋น„ํŠธ LoongArch(GOARCH=loong64), RISC-V(GOARCH=riscv64), S390X(GOARCH=s390x)์—์„œ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋ฐฉ

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

๊ธฐ์กด์˜ printf ํŒŒ์„œ๋Š” ์ด์ œ fmt.Printf(s) ํ˜•์‹์˜ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง„๋‹จ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ s๋Š” ๋‹ค๋ฅธ ์ธ์ˆ˜๊ฐ€ ์—†๋Š” ๋น„์ƒ์ˆ˜ ํ˜•์‹ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํ˜ธ์ถœ์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. s์˜ ๊ฐ’์— % ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  fmt.Print๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. 60529. ์ด๋Ÿฌํ•œ ๊ฒ€์‚ฌ๋Š” ๊ธฐ์กด ์ฝ”๋“œ์—์„œ ํ•ญ๋ชฉ์„ ์ฐพ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ์–ธ์–ด โ€‹โ€‹๋ฒ„์ „(go.mod ํŒŒ์ผ์˜ go ์ง€์‹œ๋ฌธ์ด๋‚˜ `//go:build` ์ฃผ์„์—์„œ ์ง€์ •)์ด ์ตœ์†Œํ•œ Go 1.24์ธ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋˜์–ด Go 1.24 ํˆด์ฒด์ธ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ ๊ธด ํ†ตํ•ฉ ์ค‘๋‹จ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ๋นŒ๋“œํƒœ๊ทธ ๋ถ„์„๊ธฐ๋Š” ์ด์ œ ์ž˜๋ชป๋œ ๋นŒ๋“œํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ง„๋‹จ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „ ๋นŒ๋“œ ์ œํ•œ //go:build ์ง€์‹œ์–ด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, //go:build go1.23.1์€ ํฌ์ธํŠธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  //go:build go1.23์„ ์‚ฌ์šฉํ•˜์„ธ์š”. #64127.

๊ธฐ์กด์˜ ๋ณต์‚ฌ ์ž ๊ธˆ ๋ถ„์„๊ธฐ๋Š” ์ด์ œ for i := iter(); ์™€ ๊ฐ™์ด 3์ค‘ "for" ๋ฃจํ”„์—์„œ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋  ๋•Œ ์ง„๋‹จ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ(i); i = next(i) { โ€ฆ }์—๋Š” sync.Mutex์™€ ๊ฐ™์€ sync.Locker๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 1.22๋กœ ์ด๋™ ๊ฐ ๋ฐ˜๋ณต์— ๋Œ€ํ•ด ์ƒˆ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „ ๋ฐ˜๋ณต์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฃจํ”„์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณต์‚ฌ๋Š” ์ž ๊ธˆ์žฅ์น˜์— ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. #66387.

๊ณ ์นด์ฒดํ”„๋กœ๊ทธ

์ด์ œ cmd/go ๋„๊ตฌ์™€ GOCACHEPROG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ง€์ •๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— JSON ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋กœ ๋‚ด๋ถ€ cmd/go ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ํ…Œ์ŠคํŠธ ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” GOEXPERIMENT์˜€์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋‹ค์Œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.

์™„๋ฃŒ ์‹œ๊ฐ„

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ํ†ตํ•ด ๋Œ€ํ‘œ์ ์ธ ๋ฒค์น˜๋งˆํฌ์—์„œ CPU ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ‰๊ท  2~3% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์ ์šฉ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์—๋Š” ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋‚ด์žฅ ๋งต ๊ตฌํ˜„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์Šค์›จ๋ด ํ…Œ์ด๋ธ”, ์ž‘์€ ๊ฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ํ• ๋‹น, ๊ทธ๋ฆฌ๊ณ  ๋ฎคํ…์Šค์˜ ์ƒˆ๋กœ์šด ๋‚ด๋ถ€ ๋Ÿฐํƒ€์ž„ ๊ตฌํ˜„์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ ๋‚ด์žฅ๋œ ๋งต ๊ตฌํ˜„๊ณผ ์ƒˆ๋กœ์šด ๋‚ด๋ถ€ ๋Ÿฐํƒ€์ž„ ๋ฎคํ…์Šค๋Š” ๋นŒ๋“œ ์‹œ์— ๊ฐ๊ฐ GOEXPERIMENT=noswissmap ๋ฐ GOEXPERIMENT=nospinbitmutex๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฏธ cgo์—์„œ ์ƒ์„ฑ๋œ ์ˆ˜์‹ ์ž ์œ ํ˜•์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ–ˆ์ง€๋งŒ, ์œ ํ˜• ๋ณ„์นญ์„ ํ†ตํ•ด ์ด ์ œํ•œ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Go 1.24์—์„œ๋Š” ์ด์ œ ์ˆ˜์‹ ๊ธฐ๊ฐ€ cgo์—์„œ ์ƒ์„ฑ๋œ ์œ ํ˜•์„ ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ(์œ ํ˜• ๋ณ„์นญ์„ ํ†ตํ•ด) ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋ง์ปค

์ด์ œ ๋ง์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ELF ํ”Œ๋žซํผ์—์„œ GNU ๋นŒ๋“œ ์‹๋ณ„์ž(ELF ํ•ญ๋ชฉ NT_GNU_BUILD_ID)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  macOS์—์„œ๋Š” UUID(Mach-O ๋กœ๋“œ ๋ช…๋ น LC_UUID)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ID ๋˜๋Š” UUID๋Š” Go ๋นŒ๋“œ ID์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. -B none ๋ง์ปค ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์„ ๋Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ 0์ง„์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ -B XNUMXxNNNN ๋ง์ปค ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™๋ณด

์— ๋ช…์‹œ๋œ ๋ฐ”์™€ ๊ฐ™์ด Go 1.22 ๋ฆด๋ฆฌ์Šค ๋…ธํŠธGo 1.24๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด์ œ Go 1.22.6 ์ด์ƒ์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ Go 1.26์ด ์ถœ์‹œ๋˜๋ ค๋ฉด Go 1.24 ์ด์ƒ์˜ ํฌ์ธํŠธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋””๋ ‰ํ† ๋ฆฌ ์ œํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ ์•ก์„ธ์Šค

์ƒˆ๋กœ์šด ์œ ํ˜• os.๋ฃจํŠธ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ os.OpenRoot ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ด๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. os.๋ฃจํŠธ. ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ os.๋ฃจํŠธ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๋””๋ ‰ํ† ๋ฆฌ ์™ธ๋ถ€์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์ฐธ์กฐํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์™ธ๋ถ€์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒฝ๋กœ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. os.Root์˜ ๋ฉ”์„œ๋“œ๋Š” os ํŒจํ‚ค์ง€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž‘์—…์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, os.๋ฃจํŠธ.์—ด๊ธฐ, os.๋ฃจํŠธ.์ƒ์„ฑ, os.๋ฃจํŠธ.Mkdir ะธ os.๋ฃจํŠธ.ํ†ต๊ณ„.

์ƒˆ๋กœ์šด ๋ฒค์น˜๋งˆํฌ ๊ธฐ๋Šฅ

๋ฒค์น˜๋งˆํฌ๋Š” ์ด์ œ ๋” ๋น ๋ฅด๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ.B.Loop bN์„ ํฌํ•จํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฃจํ”„ ๊ตฌ์กฐ(์˜ˆ: for range bN) ๋Œ€์‹  for b.Loop() { โ€ฆ }์™€ ๊ฐ™์€ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฒค์น˜๋งˆํฌ ํ•จ์ˆ˜๋Š” -count๋‹น ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์„ค์ • ๋ฐ ์ •๋ฆฌ ๋‹จ๊ณ„๋Š” ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฒฐ๊ณผ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋ฏ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฃจํ”„ ๋ณธ๋ฌธ์„ ์™„์ „ํžˆ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐœ์„ ๋œ ๋งˆ๋ฌด๋ฆฌ์ž

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

์ƒˆ๋กœ์šด ์•ฝํ•œ ํŒจํ‚ค์ง€

์ƒˆ ํŒจํ‚ค์ง€ ์•ฝํ•œ ์•ฝ์ ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค.

์•ฝํ•œ ํฌ์ธํ„ฐ๋Š” ๋งคํ•‘ ๊ฐ’์„ ์œ„ํ•œ ์•ฝํ•œ ์‚ฌ์ „, ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์ •๊ทœํ™” ์‚ฌ์ „๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ œ๊ณต๋˜๋Š” ์ €์ˆ˜์ค€ ๊ธฐ๋ณธํ˜•์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•œ, ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์บ์‹œ. ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๋‹ค์Œ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„.AddCleanup ะธ maphash.๋น„๊ต ๊ฐ€๋Šฅ.

์ƒˆ๋กœ์šด crypto/mlkem ํŒจํ‚ค์ง€

์ƒˆ ํŒจํ‚ค์ง€ ํฌ๋ฆฝํ† /mlkem ML-KEM-768 ๋ฐ ML-KEM-1024๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ML-KEM์€ ์ด์ „์— Kyber๋กœ ์•Œ๋ ค์กŒ์œผ๋ฉฐ ๋‹ค์Œ์— ๋ช…์‹œ๋œ ํฌ์ŠคํŠธ ์–‘์ž ํ‚ค ๊ตํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. FIPS 203.

์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€ crypto/hkdf, crypto/pbkdf2 ๋ฐ crypto/sha3

์ƒˆ ํŒจํ‚ค์ง€ ํฌ๋ฆฝํ† /hkdf HMAC ๊ธฐ๋ฐ˜ "์ถ”์ถœ ๋ฐ ํ™•์žฅ" ํ‚ค ํŒŒ์ƒ ํ•จ์ˆ˜ HKDF๋ฅผ ์ •์˜ํ•œ ๋Œ€๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. RFC 5869.

์ƒˆ ํŒจํ‚ค์ง€ ์•”ํ˜ธ/pbkdf2 PBKDF2์— ์ •์˜๋œ ๋Œ€๋กœ ์•”ํ˜ธ ๊ธฐ๋ฐ˜ ํ‚ค ํŒŒ์ƒ ํ•จ์ˆ˜ PBKDFXNUMX๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. RFC 8018.

์ƒˆ ํŒจํ‚ค์ง€ ์•”ํ˜ธํ™”/sha3 SHA-3 ํ•ด์‹œ ํ•จ์ˆ˜์™€ SHAKE ๋ฐ cSHAKE ํ™•์žฅ ๊ฐ€๋Šฅ ์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ๋Œ€๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. FIPS 202.

์„ธ ๊ฐ€์ง€ ํŒจํ‚ค์ง€๋Š” ๋ชจ๋‘ ๊ธฐ์กด์˜ golang.org/x/crypto/โ€ฆ ํŒจํ‚ค์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

FIPS 140-3 ์ค€์ˆ˜

์ด ๋ฆด๋ฆฌ์Šค์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. FIPS 140-3 ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์„ธํŠธ.

Go ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์€ FIPS 140-3 ์Šน์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํˆฌ๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๋‚ด๋ถ€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒจํ‚ค์ง€ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. ์Šน์ธ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด Go ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ํ™˜๊ฒฝ ๋ณ€์ˆ˜ GOFIPS140์„ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ์— ์‚ฌ์šฉํ•  Go ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์˜ ๋ฒ„์ „์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด GODEBUG ์„ค์ • fips140์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Ÿฐํƒ€์ž„์— FIPS 140-3 ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go 1.24์—๋Š” ํ˜„์žฌ CMVP ์ธ์ฆ ๋žฉ์—์„œ ํ…Œ์ŠคํŠธ ์ค‘์ธ Go ์•”ํ˜ธํ™” ๋ชจ๋“ˆ v1.0.0์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์‹คํ—˜ ํŒจํ‚ค์ง€ ํ…Œ์ŠคํŠธ/๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ

์ƒˆ๋กœ์šด ์‹คํ—˜ ํŒจํ‚ค์ง€ ํ…Œ์ŠคํŠธ/๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ ๋™์‹œ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋Šฅ ๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฒฉ๋ฆฌ๋œ "๋ฒ„๋ธ”"์—์„œ ๊ณ ๋ฃจํ‹ด ๊ทธ๋ฃน์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๊ธฐ๋Šฅ์˜ ๋ฒ„๋ธ” ์†์—์„œ ์‹œ๊ฐ„ ๊ฑฐ์ง“ ์‹œ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ ๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ ๋Œ€๊ธฐ ํ˜„์žฌ ๋ฒ„๋ธ”์—์„œ ๋ชจ๋“  ๊ณ ๋ฃจํ‹ด์ด ์ฐจ๋‹จ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒจํ‚ค์ง€ ์„ค๋ช…์„œ์—์„œ ํ™•์ธํ•˜์„ธ์š”.

synctest ํŒจํ‚ค์ง€๋Š” ์‹คํ—˜์ ์ด๋ฏ€๋กœ GOEXPERIMENT=synctest๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ API๋Š” ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์— #67434 ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๋ณด๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์†Œํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

์•„์นด์ด๋ธŒ

archive/zip๊ณผ archive/tar์— โ€‹โ€‹์žˆ๋Š” (*Writer.AddFS) ๊ตฌํ˜„์€ ์ด์ œ ๋นˆ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ํ—ค๋”๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ดํŠธ

ํŒจํ‚ค์ง€ ๋ฐ”์ดํŠธ ๋ฐ˜๋ณต์ž์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์„  ๋ฐ”์ดํŠธ ์Šฌ๋ผ์ด์Šค์—์„œ ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ„ํ•  ์‹œํ€€์Šค ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ๊ตฌ๋ถ„๋œ ๋ฐ”์ดํŠธ ์Šฌ๋ผ์ด์Šค์˜ ๋ชจ๋“  ํ•˜์œ„ ์Šฌ๋ผ์ด์Šค์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ„ํ•  ํ›„ ์‹œํ€€์Šค ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ๋งˆ๋‹ค ๋ถ„ํ• ๋œ ๋ฐ”์ดํŠธ ์Šฌ๋ผ์ด์Šค์˜ ํ•˜์œ„ ์Šฌ๋ผ์ด์Šค์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„๋“œ์‹œํ€€์Šค ์ •์˜๋œ ๋Œ€๋กœ ๊ณต๋ฐฑ ๋ฌธ์ž ์‹œํ€€์Šค ์ฃผ๋ณ€์˜ ๋ฐ”์ดํŠธ ์Šฌ๋ผ์ด์Šค ํ•˜์œ„ ์Šฌ๋ผ์ด์Šค์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ.IsSpace
  • ํ•„๋“œFuncSeq ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ ์‹œํ€€์Šค ์ฃผ๋ณ€์˜ ๋ฐ”์ดํŠธ ์Šฌ๋ผ์ด์Šค ํ•˜์œ„ ์Šฌ๋ผ์ด์Šค์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธ/AES

๋ฐ˜ํ™˜๊ฐ’ ๋‰ด์น˜ํผ ๋” ์ด์ƒ NewCTR, NewGCM, NewCBCEncrypter ๋ฐ NewCBCDecrypter ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด์ œ ์˜๋ฏธ ๋ธ”๋ก ์ ์ ˆํ•œ ๊ธฐ๋Šฅ์— ์ง์ ‘ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ/์•”ํ˜ธํ™”. ํ˜„์žฌ crypto/cipher๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋”๋ผ๋„ Block ๊ฐ’์— ๋Œ€ํ•ด ์—ฌ์ „ํžˆ ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธ/์•”ํ˜ธํ™”

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ NewGCMWithRandomNonce ๋ฐ˜ํ™˜ AEADSeal ์ค‘์— ์ž„์˜์˜ nonce๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์•”ํ˜ธ๋ฌธ ์•ž์— ๋ถ™์—ฌ AES-GCM์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ะ ะตะฐะปะธะทะฐั†ะธั ํ๋ฆ„, ๋ฐ˜ํ™˜ ์ƒˆ๋กœ์šด CTR ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์•”ํ˜ธ/AES ์ด์ œ amd64 ๋ฐ arm64์—์„œ ๋ช‡ ๋ฐฐ ๋” ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๋‰ดOFB, ์ƒˆ๋กœ์šดCFBEncrypter ะธ NewCFBDecrypter ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OFB์™€ CFB ๋ชจ๋“œ๋Š” ์ธ์ฆ๋˜์ง€ ์•Š์•„ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Šฅ๋™์ ์ธ ๊ณต๊ฒฉ์ด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค AEAD ๊ทธ ๋Œ€๊ฐ€๋กœ. ์ธ์ฆ๋˜์ง€ ์•Š์€ ๋ชจ๋“œ์˜ ๊ฒฝ์šฐ ํ๋ฆ„ ํ•„์š”ํ•œ, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ƒˆ๋กœ์šด CTR ๋Œ€์‹ ์—.

ํฌ๋ฆฝํ† /ECDSA

ํ”„๋ผ์ด๋น—ํ‚ค.์„œ๋ช… ์ด์ œ ๋‹ค์Œ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ก ์  ์„œ๋ช…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. RFC 6979, ๋‚œ์ˆ˜ ์†Œ์Šค๊ฐ€ nil์ธ ๊ฒฝ์šฐ.

์•”ํ˜ธ/md5

๋ฐ˜ํ™˜๊ฐ’ md5.์ƒˆ๋กœ์šด, ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฝ”๋”ฉ.๋ฐ”์ด๋„ˆ๋ฆฌ์–ดํŽœ๋”.

ํฌ๋ฆฝํ† /๋žœ๋“œ

๊ธฐ๋Šฅ ์ฝ๊ธฐ ์ด์ œ๋Š” ์‹คํŒจ๊ฐ€ ์ „ํ˜€ ์—†๋‹ค๋Š” ๋ณด์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Read๊ฐ€ ์ฝ๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌ๋”, ํ”„๋กœ๊ทธ๋žจ์ด ์˜๊ตฌ์ ์œผ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Reader๋Š” ํ•ญ์ƒ ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Reader ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. 3.17 ์ด์ „์˜ Linux ์ปค๋„์€ ํ•œ ๊ฐ€์ง€ ์˜ˆ์™ธ๋กœ, ๊ธฐ๋ณธ Reader๊ฐ€ ์—ฌ์ „ํžˆ /dev/urandom์„ ์—ด์–ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Linux 6.11 ์ด์ƒ์—์„œ๋Š” Reader๊ฐ€ ์ด์ œ vDSO๋ฅผ ํ†ตํ•ด getrandom ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์€ ์–‘์˜ ์ฝ๊ธฐ ์ž‘์—…์— ๋น„ํ•ด ๋ช‡ ๋ฐฐ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

OpenBSD Reader๋Š” ์ด์ œ arc4random_buf(3)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋ณธ๋ฌธ ์ด์ œ ์•”ํ˜ธํ™”๋˜์–ด ์•ˆ์ „ํ•œ ๋ฌด์ž‘์œ„ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธ/rsa

์ œ๋„ค๋ ˆ์ดํŠธํ‚ค ์ด์ œ 1024๋น„ํŠธ ๋ฏธ๋งŒ์˜ ํ‚ค ๊ธธ์ด๊ฐ€ ์š”์ฒญ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Sign, Verify, Encrypt, Decrypt ๋ฉ”์„œ๋“œ๋Š” ์ด์ œ 1024๋น„ํŠธ๋ณด๋‹ค ์ž‘์€ ํ‚ค ํฌ๊ธฐ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ‚ค๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. GODEBUG ์„ค์ •ํ•˜๊ธฐ rsa1024min=0์€ ์ด์ „ ๋™์ž‘์„ ๋ณต์›ํ•˜์ง€๋งŒ, Go ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”ํ•  ๋•Œ์—๋งŒ ํ…Œ์ŠคํŠธ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— //go:debug rsa1024min=0 ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์˜ˆ GenerateKey๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ํ‘œ์ค€ 2024๋น„ํŠธ ํ…Œ์ŠคํŠธ ํ‚ค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ „ํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. PrivateKey.์‚ฌ์ „ ๊ณ„์‚ฐ ์— PrivateKey.Validate. ์ด์ œ ๋ถ€๋ถ„์ ์œผ๋กœ ์ฑ„์›Œ์ง„ ๊ฒฝ์šฐ ์‚ฌ์ „ ๊ณ„์‚ฐ์ด ๋” ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ ๊ฐ’์˜ˆ๋ฅผ ๋“ค์–ด JSON์—์„œ ํ‚ค๋ฅผ ์ถ”์ถœํ•  ๋•Œ.

์ด์ œ ํŒจํ‚ค์ง€๋Š” Validate๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋”๋ผ๋„ ๋” ๋งŽ์€ ์ž˜๋ชป๋œ ํ‚ค๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ œ๋„ค๋ ˆ์ดํŠธํ‚ค ์ด์ œ ์†์ƒ๋œ ๋ฌด์ž‘์œ„์„ฑ ์†Œ์Šค์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ง€ ์ด๋ฆฌ ะธ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋จ ๊ตฌ์กฐ ์˜ PrivateKey ์ด์ œ ์ผ๋ถ€ ๊ฐ’์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ๋˜๊ณ  ๊ฒ€์ฆ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์— ์„ค๋ช…๋œ ๋Œ€๋กœ RSA ํ‚ค๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ crypto/x509์—๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ธPKCS1v15 ะธ PKCS1v15 ํ™•์ธ ์ด์ œ SHA-512/224, SHA-512/256 ๋ฐ SHA-3์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ œ๋„ค๋ ˆ์ดํŠธํ‚ค ์ด์ œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ธ ์ง€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(Euler ํ•จ์ˆ˜ ๋Œ€์‹  Carmichael ํ•จ์ˆ˜). ์†Œ์ˆ˜๋กœ๋งŒ ํ‚ค๋ฅผ ์™ธ๋ถ€์—์„œ ์žฌ์ƒ์„ฑํ•˜๋Š” ๋“œ๋ฌธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค๋ฅด์ง€๋งŒ ํ˜ธํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ wasm์—์„œ ๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค์— ๋Œ€ํ•œ ์ž‘์—…์ด ์ตœ๋Œ€ 2๋ฐฐ ๋” ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”/sha*

์•”ํ˜ธ/๋ฏธ๋ฌ˜ํ•œ

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ WithDataIndependentTiming ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ํŠน์ • ๋ช…๋ น์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋ณ„ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜๋„๋ก ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ์„ธ์„œ ์ˆ˜์ค€ ํ•จ์ˆ˜์— ์˜ํ•ด ์ตœ์ ํ™”๋˜์–ด ๊ฐ€๋ณ€ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ WithDataIndependentTiming์€ arm64์—์„œ PSTATE.DIT ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GODEBUG ์„ค์ •ํ•˜๊ธฐ dataindependenttiming=1์€ Go ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์— ๋Œ€ํ•ด DIT ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ XOR๋ฐ”์ดํŠธ ์ž…๋ ฅ ๋‚ด์šฉ๊ณผ ์™„์ „ํžˆ ๊ฒน์น˜๊ฑฐ๋‚˜ ์ „ํ˜€ ๊ฒน์น˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๋™์ž‘์ด ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์•˜์ง€๋งŒ ์ด์ œ XORBytes๊ฐ€ ํŒจ๋‹‰์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”/TLS

TLS ์„œ๋ฒ„๋Š” ์ด์ œ ์•”ํ˜ธํ™”๋œ ํด๋ผ์ด์–ธํŠธ Hello(ECH)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ํ•„๋“œ์— ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. ๊ตฌ์„ฑ.์•”ํ˜ธํ™”๋œํด๋ผ์ด์–ธํŠธHelloKeys.

์ƒˆ๋กœ์šด ํฌ์ŠคํŠธ ์–‘์ž ํ‚ค ๊ตํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜ X25519MLKEM768 ์ด์ œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜๊ณ  ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ.๊ณก์„  ํ™˜๊ฒฝ ์„ค์ • 0์ž…๋‹ˆ๋‹ค. GODEBUG ์„ค์ •ํ•˜๊ธฐ tlsmlkem=0์€ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ—˜์ ์ธ X25519Kyber768Draft00 ํ‚ค ๊ตํ™˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ‚ค ๊ตํ™˜ ์ˆœ์„œ๋Š” ์ด์ œ ์ „์ ์œผ๋กœ crypto/tls ํŒจํ‚ค์ง€์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธํ•˜๋‹ค ๊ตฌ์„ฑ.๊ณก์„  ํ™˜๊ฒฝ ์„ค์ • ์ด์ œ ๋ฌด์‹œ๋˜๊ณ  ๋‚ด์šฉ์€ ํ•„๋“œ๊ฐ€ ์ฑ„์›Œ์งˆ ๋•Œ ํฌํ•จํ•  ํ‚ค ๊ตํ™˜์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ถ„์•ผ ํด๋ผ์ด์–ธํŠธHelloInfo.ํ™•์žฅ ํด๋ผ์ด์–ธํŠธ Hello ๋ฉ”์‹œ์ง€์—์„œ ์ˆ˜์‹ ๋œ ํ™•์žฅ ์‹๋ณ„์ž ๋ชฉ๋ก์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” TLS ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ง€๋ฌธ ์ธ์‹์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋ฆฝํ† /x509

GODEBUG ์„ค์ •ํ•˜๊ธฐ x509sha1์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ.ํ™•์ธ ๋” ์ด์ƒ SHA-1 ๊ธฐ๋ฐ˜ ์„œ๋ช…์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

OID ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.๋ฐ”์ด๋„ˆ๋ฆฌ์–ดํŽœ๋” ะธ ์ธ์ฝ”๋”ฉ.TextAppender.

๊ธฐ๋ณธ ์ธ์ฆ์„œ ์ •์ฑ… ํ•„๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ.์ •์ฑ… ์‹๋ณ„์ž ์— ์ธ์ฆ์„œ.์ •์ฑ…. ์ธ์ฆ์„œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ ๋‘ ํ•„๋“œ ๋ชจ๋‘ ์ฑ„์›Œ์ง€์ง€๋งŒ ์ธ์ฆ์„œ ์ •์ฑ…์„ ์ƒ์„ฑํ•  ๋•Œ Certificate.PolicyIdentifiers ๋Œ€์‹  Certificate.Policies ํ•„๋“œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GODEBUG ์„ค์ • x509usepolicies=0.

์ธ์ฆ์„œ ์ƒ์„ฑ ์ด์ œ ํ…œํ”Œ๋ฆฟ ํ•„๋“œ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ RFC 5280 ํ˜ธํ™˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ.์ผ๋ จ๋ฒˆํ˜ธ ์ถฉ๋Œํ•˜๋Š” ๋Œ€์‹  nil์ž…๋‹ˆ๋‹ค.

์ธ์ฆ์„œ.ํ™•์ธ ์ด์ œ RFC 5280 ๋ฐ RFC 9618์— ์ •์˜๋œ ์ •์ฑ… ๊ฒ€์ฆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ•„๋“œ VerifyOptions.CertificatePolicies ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ์ •์ฑ… ์ง‘ํ•ฉ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OID. ์œ ํšจํ•œ ์ •์ฑ… ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋Š” ์ธ์ฆ์„œ ์ฒด์ธ๋งŒ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ.ํ™•์ธ.

๋งˆ์ƒฌPKCS8๊ฐœ์ธํ‚ค ์ด์ œ ์ž˜๋ชป๋œ RSA ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋Œ€์‹  ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. (๋งˆ์ƒฌPKCS1๊ฐœ์ธํ‚ค ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜์ด ์—†์œผ๋ฉฐ ์ž˜๋ชป๋œ ํ‚ค๊ฐ€ ์ œ๊ณต๋  ๋•Œ์˜ ๋™์ž‘์€ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

ParsePKCS1PrivateKey ะธ ParsePKCS8PrivateKey ์ด์ œ ์ธ์ฝ”๋”ฉ๋œ CRT ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋ฏ€๋กœ ์ด์ „์— ์ˆ˜๋ฝ๋œ ์ž˜๋ชป๋œ RSA ํ‚ค๋ฅผ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฉ๋ฒ• GODEBUG ์„ค์ • x509rsacrt=0์€ CRT ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊ทธ/์—˜ํ”„

ํŒจํ‚ค์ง€ ๋””๋ฒ„๊ทธ/์—˜ํ”„ ๋™์  ELF(์‹คํ–‰ ๊ฐ€๋Šฅ ๋ฐ ๋งํฌ ๊ฐ€๋Šฅ ํ˜•์‹) ํŒŒ์ผ์—์„œ ์‹ฌ๋ณผ ๋ฒ„์ „์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• ํŒŒ์ผ.๋™์ ๋ฒ„์ „ ELF ํŒŒ์ผ์— ์ •์˜๋œ ๋™์  ๋ฒ„์ „ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• ํŒŒ์ผ.๋™์  ๋ฒ„์ „ ํ•„์š” ๋‹ค๋ฅธ ELF ๊ฐ์ฒด์— ์ •์˜๋œ ์ด ELF ํŒŒ์ผ์— ํ•„์š”ํ•œ ๋™์  ๋ฒ„์ „ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ์ƒˆ๋กœ์šด ๋ถ„์•ผ๊ฐ€ ์ƒ๊ฒผ๋‹ค ์‹ฌ๋ณผ.๋ฒ„์ „ ์žˆ์Œ ะธ ์‹ฌ๋ณผ.๋ฒ„์ „์ธ๋ฑ์Šค ๊ธฐํ˜ธ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋ถ€ํ˜ธํ™”

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

์ธ์ฝ”๋”ฉ/json

๋นŒ๋“œํ•  ๋•Œ, ๊ตฌ์กฐ ํ•„๋“œ ํƒœ๊ทธ์— ์ƒˆ๋กœ์šด omitzero ์˜ต์…˜์ด ์žˆ๋Š” ๊ตฌ์กฐ ํ•„๋“œ๋Š” ๊ฐ’์ด 0์ด๋ฉด ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. ํ•„๋“œ ์œ ํ˜•์— IsZero() bool ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด๋Š” ๊ฐ’์ด 0์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ’์€ 0์ด ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์œ ํ˜•์— ๋Œ€ํ•œ null ๊ฐ’. omitzero ํ•„๋“œ ํƒœ๊ทธ๋Š” null ๊ฐ’์„ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ์˜๋„์ธ ๊ฒฝ์šฐ omitempty๋ณด๋‹ค ๊น”๋”ํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํŠนํžˆ omitempty์™€ ๋‹ฌ๋ฆฌ omitzero๋Š” 0์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„.์‹œ๊ฐ„ ์ด๋Š” ๋ฌธ์ œ์˜ ์ผ๋ฐ˜์ ์ธ ์›์ธ์ž…๋‹ˆ๋‹ค.

omitempty์™€ omitzero๊ฐ€ ๋‘˜ ๋‹ค ์ง€์ •๋œ ๊ฒฝ์šฐ ๊ฐ’์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ 0(๋˜๋Š” ๋‘˜ ๋‹ค)์ด๋ฉด ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค.

UnmarshalTypeError.Field ์ด์ œ ๋” ์ž์„ธํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋‚ด์žฅ ๊ตฌ์กฐ๊ฐ€ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋‹ค/ํƒ€์ž…

Len() int ๋ฐ At(int) T์™€ ๊ฐ™์ด ๋ฉ”์„œ๋“œ ์Œ์˜ ์‹œํ€€์Šค๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ชจ๋“  go/types ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—๋Š” ์ด์ œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์žˆ์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

params := fn.Type.(*types.Signature).Params() i := 0์— ๋Œ€ํ•ด; i < params.Len(); i++ { ๋งค๊ฐœ๋ณ€์ˆ˜.At(i)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ด๊ฒƒ์— ๋Œ€ํ•ด์„œ:

param := range fn.Signature().Params().Variables()์— ๋Œ€ํ•ด { use(param) }

๋ฐฉ๋ฒ• : ์ธํ„ฐํŽ˜์ด์Šค.์ž„๋ฒ ๋””๋“œํƒ€์ž… ์ธํ„ฐํŽ˜์ด์Šค.๋ช…์‹œ์  ๋ฉ”์„œ๋“œ ์ธํ„ฐํŽ˜์ด์Šค.๋ฉ”์†Œ๋“œ ๋ฉ”์„œ๋“œ ์ง‘ํ•ฉ.๋ฉ”์†Œ๋“œ ๋ช…๋ช…๋œ ๋ฐฉ๋ฒ• ๋ฒ”์œ„.์–ด๋ฆฐ์ด ๊ตฌ์กฐ.ํ•„๋“œ ํŠœํ”Œ.๋ณ€์ˆ˜ ์œ ํ˜• ๋ชฉ๋ก.์œ ํ˜• TypeParamList.TypeParams ์—ฐํ•ฉ.์กฐ๊ฑด

ํ•ด์‹œ์‹œ/*

๋กœ๊ทธ/์Šฌ๋กœ๊ทธ

์ƒˆ๋กœ์šด ์‚ญ์ œ ํ•ธ๋“ค๋Ÿฌ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์ถœ๋ ฅ์„ ์‚ญ์ œํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ ะธ ๋ ˆ๋ฒจ๋ณ€์ˆ˜ ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.TextAppender.

์ˆ˜ํ•™/*

๊ทธ๋ฌผ

๋“ฃ๊ธฐCondig ํ˜„์žฌ๋Š” ์ง€์›๋˜๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ MPTCP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ๋Š” Linux์—๋งŒ ํ•ด๋‹น).

IP ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.TextAppender.

๋„ท/http

์ œํ•œ ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๊ตํ†ตํŽธ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ 1xx ์ •๋ณด ์‘๋‹ต์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” 5๊ฐœ๊ฐ€ ๋„˜๋Š” 1xx ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ์š”์ฒญ์ด ์ค‘๋‹จ๋˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  1xx ์‘๋‹ต์˜ ์ด ํฌ๊ธฐ๊ฐ€ ๊ตฌ์„ฑ ์„ค์ •์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์šด์†ก.MaxResponseHeaderBytes.

๋˜ํ•œ ์š”์ฒญ์— ์ถ”์  ํ›„ํฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ net/http/httptrace.ํด๋ผ์ด์–ธํŠธ์ถ”์ .Got1xx์‘๋‹ต, ์ด์ œ ๋‹ต๋ณ€ ์ด ๊ฐœ์ˆ˜์— ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค 1xx. Got1xxResponse ํ›„ํฌ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์š”์ฒญ์„ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตํ†ตํŽธ ะธ ์„œ๋ฒ„ ์ด์ œ HTTP/2 ํ”„๋กœํ† ์ฝœ ์„ค์ •์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” HTTP2 ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ถ„์•ผ ์„œ๋ฒ„.ํ”„๋กœํ† ์ฝœ ะธ ์šด์†ก.ํ”„๋กœํ† ์ฝœ ์„œ๋ฒ„๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ HTTP/2 ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋„๋ก ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ ์„œ๋ฒ„.ํ”„๋กœํ† ์ฝœ UnencrypterHTTP2๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ํฌํŠธ์—์„œ HTTP/2 ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ํฌํŠธ์—์„œ HTTP/1๊ณผ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ HTTP/2๋ฅผ ๋ชจ๋‘ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ ์šด์†ก.ํ”„๋กœํ† ์ฝœ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ HTTP2๋ฅผ ํฌํ•จํ•˜๊ณ  HTTP1์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ „์†ก์€ ์ฃผ์†Œ์— ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ HTTP/2๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. http://. ์ „์†ก์ด HTTP/1๊ณผ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ HTTP/2๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ HTTP/1์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ HTTP/2์— ๋Œ€ํ•œ ์ง€์›์€ "Forward-Learning์„ ์‚ฌ์šฉํ•œ HTTP/2"(RFC 9113, ์„น์…˜ 3.3)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋Š” ํ—ค๋” "Upgrade: h2c"๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ท/๋„ทํŒ

์ฃผ์†Œ, ์ฃผ์†Œ ํฌํŠธ ะธ ์ ‘๋‘์‚ฌ ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.๋ฐ”์ด๋„ˆ๋ฆฌ์–ดํŽœ๋” ะธ ์ธ์ฝ”๋”ฉ.TextAppender.

๋„คํŠธ/URL

URL ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.๋ฐ”์ด๋„ˆ๋ฆฌ์–ดํŽœ๋”.

์šด์˜ ์ฒด์ œ/์‚ฌ์šฉ์ž

Windows์—์„œ Current ์ด์ œ Windows Nano Server์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Nano Server์—์„œ ๋ˆ„๋ฝ๋œ NetApi32 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Windows์—์„œ Current, ์กฐํšŒ ะธ ์กฐํšŒID ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ œ๊ณต ์‚ฌ์šฉ์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • NT ๊ถŒํ•œ ์‹œ์Šคํ…œ
  • NT ๊ถŒํ•œ์ง€์—ญ ์„œ๋น„์Šค
  • NT ๊ถŒํ•œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค

Windows์—์„œ Current ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋А๋ฆฐ ๋„๋ฉ”์ธ์— ๊ฐ€์ž…ํ•œ ๊ฒฝ์šฐ ์†๋„๊ฐ€ ์ƒ๋‹นํžˆ ๋นจ๋ผ์ง€๋Š”๋ฐ, ์ด๋Š” ๋งŽ์€ ๊ธฐ์—… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ผ๋ฐ˜์ ์ธ ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ตฌํ˜„์˜ ์„ฑ๋Šฅ์€ ์ด์ œ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์ธ ๋ฐ˜๋ฉด, ์ด์ „ ๊ตฌํ˜„์—์„œ๋Š” ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋ช‡ ์ดˆ, ์‹ฌ์ง€์–ด ๋ช‡ ๋ถ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

Windows์—์„œ Current ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ์†Œ์œ ์ž ์‚ฌ์šฉ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹

์ •๊ทœ์‹ ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.TextAdapter.

๋Ÿฐํƒ€์ž„

๊ธฐ๋Šฅ ๊ตฌ ๋ฃจํŠธ ํ˜„์žฌ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ๋Š” ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "go" ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ •์˜ํ•˜๊ณ , go env GOROOT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GOROOT๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด

ํŒจํ‚ค์ง€ ๋ฌธ์ž์—ด ๋ฐ˜๋ณต์ž ์ž‘์—…์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์„  ๋ฌธ์ž์—ด์—์„œ ์ค„ ๋ฐ”๊ฟˆ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์ค„์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ„ํ•  ์‹œํ€€์Šค ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ํ•˜์œ„ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถ„ํ•  ํ›„ ์‹œํ€€์Šค ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ๋งˆ๋‹ค ๋ถ„ํ• ๋œ ๋ฌธ์ž์—ด์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„๋“œ์‹œํ€€์Šค ์ •์˜๋œ ๋Œ€๋กœ ๊ณต๋ฐฑ ๋ฌธ์ž ์‹œํ€€์Šค ์ฃผ๋ณ€์˜ ๋ฌธ์ž์—ด ํ•˜์œ„ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.์œ ๋‹ˆ์ฝ”๋“œ.IsSpace
  • ํ•„๋“œFuncSeq ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ ์‹œํ€€์Šค ์ฃผ๋ณ€์˜ ๋ฌธ์ž์—ด ํ•˜์œ„ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋™๊ธฐํ™”

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

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋นŒ๋“œ ์ค‘์— GOEXPERIMENT=nosynchashtriemap์„ ์„ค์ •ํ•˜์—ฌ ์ด์ „ ๊ตฌํ˜„์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๋ฌธ์ œ ์–‘์‹์„ ์ž‘์„ฑํ•˜์„ธ์š”.

ํ…Œ์ŠคํŠธ

์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• T. ๋ฌธ๋งฅ ะธ B. ๋ฌธ๋งฅ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํ…Œ์ŠคํŠธ ์ •๋ฆฌ ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‚ญ์ œ๋˜๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ• ํ‹ฐ.์น˜๋””๋ฅด ะธ B.ํฌ๋””๋ฅด ํ…Œ์ŠคํŠธ๋‚˜ ๋ฒค์น˜๋งˆํฌ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ/ํ…œํ”Œ๋ฆฟ

์ด์ œ ํ…œํ”Œ๋ฆฟ์€ range-over-func์™€ range-over-int๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„

Time ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ์ธ์ฝ”๋”ฉ.๋ฐ”์ด๋„ˆ๋ฆฌ์–ดํŽœ๋” ะธ ์ธ์ฝ”๋”ฉ.TextAppender.

ํฌํŠธ

Linux

๊ทธ๋Œ€๋กœ ๋ฐœํ‘œํ•˜๋‹ค Go 1.23 ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ์— ๋”ฐ๋ฅด๋ฉด, Go 1.24์—๋Š” Linux ์ปค๋„ ๋ฒ„์ „ 3.2 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์œˆ

Go 1.24๋Š” macOS 11 Big Sur์—์„œ ์‹คํ–‰๋˜๋Š” ๋งˆ์ง€๋ง‰ ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค. Go 1.25์—๋Š” macOS 12 Monterey ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

WebAssembly

Go ํ”„๋กœ๊ทธ๋žจ์— go:wasmexport ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์‹œ์–ด๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ํ•จ์ˆ˜๋ฅผ WebAssembly ํ˜ธ์ŠคํŠธ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WebAssembly System Interface Preview 1(GOOS=wasip1 GOARCH=wasm)์—์„œ Go 1.24๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด Go ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜์‘๊ธฐ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋นŒ๋“œ ํ”Œ๋ž˜๊ทธ -buildmode=c-shared๋ฅผ ์ง€์ •ํ•˜์—ฌ

์ด์ œ go:wasmimport ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋‚˜ ๊ฒฐ๊ณผ ์œ ํ˜•์œผ๋กœ ํ—ˆ์šฉ๋˜๋Š” ์œ ํ˜•์ด ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ bool, string, uintptr ๋ฐ ํŠน์ • ์œ ํ˜•์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜), 32๋น„ํŠธ ๋ฐ 64๋น„ํŠธ ์ •์ˆ˜ ๋ฐ ๋ถ€๋™ ์†Œ์ˆ˜์  ์œ ํ˜•๊ณผ ์ด๋ฏธ ํ—ˆ์šฉ๋˜๋Š” unsafe.Pointer๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์€ go:wasmexport ํ•จ์ˆ˜์˜ ์ธ์ˆ˜ ๋˜๋Š” ๊ฒฐ๊ณผ ์œ ํ˜•์œผ๋กœ๋„ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

WebAssembly์— ๋Œ€ํ•œ ์ง€์› ํŒŒ์ผ์ด misc/wasm์—์„œ lib/wasm์œผ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ž‘์€ WebAssembly ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

Windows

32๋น„ํŠธ ์œˆ๋„์šฐ/arm ํฌํŠธ(GOOS=windows GOARCH=arm)๋Š” ์†์ƒ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ #70705

์ถœ์ฒ˜ : linux.org.ru

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster