HPKE, ML-KEM, TLS, crypto/rand
Go 1.27.1 (1 ก.ย. 2026) มีแก้ crypto/x509 html/template net/url os + 1.26.1 แก้ชุดเดียวกัน ถ้ายังอยู่ 1.22-1.25 แปลว่ายังโหว่อยู่:
crypto/hpke (RFC 9180) = เข้ารหัสให้ "เปิดได้คนเดียว" มีแบบ hybrid กันควอนตัมด้วย:
import "crypto/hpke"
// ไอเดีย: เอากุญแจเขา -> seal กล่อง -> ส่งไป มีแต่เขาที่ open ได้
// มี mlkemtest + cryptotest ไว้เทสต์ (testing/cryptotest ใหม่ 1.26)ใช้เมื่อ: ส่งไฟล์/โทเคนข้ามเครื่องโดยไม่ตั้งรหัสผ่านร่วมกันมาก่อน
ตั้งแต่ 1.26 crypto/tls เปิด hybrid key exchange (X25519+ML-KEM) เป็นค่าเริ่มต้น คุยกับเว็บสมัยใหม่ปลอดภัยขึ้นเองโดยไม่แก้โค้ด:
ถ้าเจอ server เก่ามากคุยไม่ติด ค่อยผ่อนชั่วคราวเพื่อไล่บั๊ก (แต่อย่าปิดถาวร ควรอัป server):
GODEBUG=tlssecpmlkem=0
net/url 1.26 ปัดตก URL แปลกๆ ที่มี : ผิดที่ใน host มากขึ้น กันยิงมั่ว/หลอก:
ต้องรับของเก่าจริงๆ ค่อยผ่อนชั่วคราว:
GODEBUG=urlstrictcolons=0
แล้วรีบแก้ต้นทางดีกว่า
1.26 มีทดลอง runtime/secret ไว้ลบ key ใน memory ให้เกลี้ยง (กันหลุดไปอยู่ใน dump) สายทำ wallet/auth ควรรู้ชื่อไว้
เช็กลิสต์ก่อนขึ้นโปรดักชัน:
go mod tidygo vet + go fix (มี unsafefuncs เตือนใช้ unsafe)slog + มาสก์url.Parse + เช็ก errอ้างอิง: Go 1.26 (hpke, mlkem, tls hybrid, url colons, secret), Go 1.27 + 1.27.1 milestone
b := make([]byte, 32)
if _, err := rand.Read(b); err != nil { // crypto/rand ไม่ใช่ math/rand
log.Fatal(err)
}
token := hex.EncodeToString(b)sum := sha256.Sum256([]byte(password + salt))
if subtle.ConstantTimeCompare(sum[:], stored[:]) != 1 {
return errors.New("รหัสผิด") // เทียบแบบกัน timing attack
}srv := &http.Server{
Addr: ":443",
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12, // ไม่รับ TLS 1.0/1.1 เก่า
},
}crypto/rand เท่านั้น ห้าม math/randConstantTimeCompare กัน timing attack