SSH และ RSA Keys อธิบายครบจบ: สร้าง ใช้งาน และรักษาความปลอดภัย Key Pairs ของคุณ
คู่มือปฏิบัติเกี่ยวกับ SSH และ RSA key pairs — หลักการทำงาน วิธีสร้างในเบราว์เซอร์ และวิธีใช้สำหรับการเข้าถึงเซิร์ฟเวอร์อย่างปลอดภัยและการเข้ารหัสข้อมูล
การเข้ารหัสด้วย public key คือรากฐานของการสื่อสารที่ปลอดภัยบนอินเทอร์เน็ต — ไม่ว่าจะเป็น SSH connections, HTTPS, JWT signing และอีเมลเข้ารหัสล้วนพึ่งพาหลักการนี้ทั้งสิ้น การเข้าใจว่า key pairs ทำงานอย่างไรจะทำให้คุณเป็นนักพัฒนาที่มีประสิทธิภาพมากขึ้นและตระหนักถึงความปลอดภัยมากยิ่งขึ้น
แนวคิดหลัก: public key และ private key
Key pair ประกอบด้วยกุญแจที่เชื่อมโยงกันทางคณิตศาสตร์สองดอก:
- Private key — เก็บไว้บนเครื่องของคุณเท่านั้น ห้ามแชร์ให้ใครเด็ดขาด คิดว่ามันคือตัวตนของคุณ
- Public key — แชร์ได้เต็มที่ ใส่ไว้บนเซิร์ฟเวอร์ ใน GitHub หรือใน JWT configurations
คณิตศาสตร์ทำงานในทิศทางเดียว: ข้อมูลที่เข้ารหัสด้วย public key จะถอดรหัสได้เฉพาะด้วย private key คู่กันเท่านั้น และข้อมูลที่ลงนามด้วย private key สามารถตรวจสอบได้ด้วย public key — โดยไม่เปิดเผย private key แต่อย่างใด
SSH keys: เข้าถึงเซิร์ฟเวอร์โดยไม่ต้องใช้รหัสผ่าน
SSH (Secure Shell) คือมาตรฐานสำหรับการเข้าถึงเซิร์ฟเวอร์จากระยะไกล การยืนยันตัวตนด้วยรหัสผ่านใช้งานได้แต่มีจุดอ่อน — รหัสผ่านอาจถูกเดา ถูก phish หรือรั่วไหล การยืนยันตัวตนด้วย SSH key มีความแข็งแกร่งกว่าในเชิงพื้นฐาน:
- Client ของคุณแสดงหลักฐานการเข้ารหัสโดยใช้ private key
- เซิร์ฟเวอร์ตรวจสอบหลักฐานนั้นกับ public key ที่คุณติดตั้งไว้
- ไม่มีรหัสผ่านส่งผ่านเครือข่าย — ไม่มีอะไรให้ดักจับได้
การตั้งค่า SSH key authentication:
# สร้าง key pair (Ed25519 คือมาตรฐานสมัยใหม่)
ssh-keygen -t ed25519 -C "your-email@example.com"
# คัดลอก public key ไปยังเซิร์ฟเวอร์
ssh-copy-id user@yourserver.com
# เชื่อมต่อ — ไม่ต้องใส่รหัสผ่าน
ssh user@yourserver.com
Public key จะถูกเพิ่มใน ~/.ssh/authorized_keys บนเซิร์ฟเวอร์ ส่วน private key จะไม่ออกจากเครื่องของคุณเลย
Ed25519 vs RSA สำหรับ SSH
Ed25519 คือคำแนะนำในปัจจุบัน:
- กุญแจขนาดเล็กกว่า (256-bit) แต่มีความปลอดภัยเทียบเท่าหรือดีกว่า RSA-4096
- สร้างและตรวจสอบลายเซ็นได้เร็วกว่า
- รองรับโดย SSH server สมัยใหม่ทุกตัว
RSA ยังคงใช้กันอย่างแพร่หลาย โดยเฉพาะในองค์กรที่มีระบบเก่า:
- 2048-bit คือขนาดขั้นต่ำที่ยอมรับได้ในปัจจุบัน
- 4096-bit มีความปลอดภัยสำรองเพิ่มเติมสำหรับกุญแจที่ใช้งานระยะยาว
- ขนาดกุญแจที่ใหญ่ขึ้นทำให้การยืนยันตัวตนช้าลงเล็กน้อย
สร้าง SSH keys ในเบราว์เซอร์ของคุณด้วย SSH Key Generator ของเรา — รองรับ Ed25519 และ ECDSA โดยใช้ Web Crypto API ข้อมูล key จะไม่ออกจากเบราว์เซอร์ของคุณ
RSA keys: การเข้ารหัสและการลงนาม
RSA keys ถูกใช้นอกเหนือจาก SSH — สำหรับ TLS certificates, JWT signing, อีเมลเข้ารหัส (PGP) และ API authentication
กรณีการใช้งาน RSA ที่พบบ่อย:
JWT (JSON Web Tokens) กับ RS256:
- ลงนาม token ด้วย RSA private key ของคุณ
- Client ตรวจสอบด้วย public key
- ต่างจาก HS256 (แบบ symmetric) ตรงที่ผู้ตรวจสอบไม่จำเป็นต้องรู้ signing secret
Code signing:
- ลงนาม release artifact ด้วย private key ของคุณ
- ผู้ใช้ตรวจสอบลายเซ็นด้วย public key ที่คุณเผยแพร่
- พิสูจน์ว่า artifact มาจากคุณและไม่ถูกแก้ไข
TLS/SSL certificates:
- Certificate authority ลงนาม public key ของคุณด้วย private key ของพวกเขา
- เบราว์เซอร์ตรวจสอบโดยใช้ public key ของ CA (ที่ฝังอยู่ในเบราว์เซอร์)
สร้าง RSA key pairs ในรูปแบบ PEM ด้วย RSA Key Generator ของเรา — ขนาด 2048-bit หรือ 4096-bit ทำงานทั้งหมดในเบราว์เซอร์ของคุณ
อธิบายรูปแบบ PEM
RSA และ SSH keys มักถูกเผยแพร่ในรูปแบบ PEM (Privacy Enhanced Mail):
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7o4qne60...
-----END PRIVATE KEY-----
ส่วนหัวและส่วนท้ายระบุประเภทของกุญแจ ส่วนกลางคือข้อมูล key ที่เข้ารหัสด้วย base64 header ที่แตกต่างกันบ่งบอกถึงประเภท key ที่ต่างกัน:
BEGIN RSA PRIVATE KEY— รูปแบบ PKCS#1 แบบดั้งเดิมBEGIN PRIVATE KEY— รูปแบบ PKCS#8 (พบบ่อยกว่าในเครื่องมือสมัยใหม่)BEGIN PUBLIC KEY— Public key ในรูปแบบ PKCS#8BEGIN OPENSSH PRIVATE KEY— รูปแบบเฉพาะของ OpenSSH สำหรับ SSH keys
การปกป้อง private key ของคุณ
ความปลอดภัยของ private key เป็นเรื่องสำคัญมาก:
- อย่า commit ลง git เด็ดขาด — เพิ่ม
*.pem,id_rsaและid_ed25519ลงใน.gitignore - ใช้ passphrase — เข้ารหัส key ขณะเก็บไว้ แม้ใครจะได้ไฟล์นั้นไป ก็ไม่สามารถใช้งานได้โดยไม่มี passphrase
- จำกัดสิทธิ์การเข้าถึง — SSH กำหนดให้ใช้
chmod 600กับไฟล์ private key และจะปฏิเสธการใช้งาน key ที่คนอื่นอ่านได้ - เปลี่ยนทันทีหากถูกเจาะ — สร้าง key pair ใหม่และลบ public key เก่าออกจากทุกเซิร์ฟเวอร์
# ตั้งค่าสิทธิ์ที่ถูกต้องบน private key ของคุณ
chmod 600 ~/.ssh/id_ed25519
Key fingerprints
Fingerprint คือ hash ย่อของ public key ที่ใช้ตรวจสอบตัวตนโดยไม่ต้องเปรียบเทียบ key ทั้งหมด:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# Output: 256 SHA256:abc123... your-email@example.com (ED25519)
เมื่อเชื่อมต่อกับเซิร์ฟเวอร์เป็นครั้งแรก SSH จะแสดง fingerprint ของ host และขอให้คุณยืนยัน ควรตรวจสอบ fingerprint นี้ผ่านช่องทางอื่น (เช่น เอกสารของผู้ให้บริการเซิร์ฟเวอร์) ก่อนยอมรับ
สรุป
SSH และ RSA key pairs มอบการยืนยันตัวตนและการเข้ารหัสที่แข็งแกร่งกว่ารหัสผ่านในเชิงพื้นฐาน ใช้ Ed25519 สำหรับ SSH, RSA-4096 สำหรับการลงนามและการเข้ารหัส ปกป้อง private key ด้วย passphrase เสมอ และสร้าง key บนเครื่องของคุณเอง — อย่าให้บริการของบุคคลที่สามสร้าง private key ให้คุณเด็ดขาด