การสร้างสุ่มข้อมูล (Random Bytes) ที่มีความปลอดภัยสูงเป็นรากฐานสำคัญของระบบรักษาความปลอดภัยคอมพิวเตอร์ ไม่ว่าจะเป็นการสร้างรหัสผ่าน, Token สำหรับล็อกอิน, หรือการสร้างคีย์เข้ารหัส คำสั่งหนึ่งที่เป็นมาตรฐานและน่าเชื่อถือที่สุดบนฝั่งเซิร์ฟเวอร์คือ openssl rand ครับ
บทความนี้จะพามาดูวิธีใช้งานคำสั่ง openssl rand แบบเข้าใจง่าย พร้อมตัวอย่างที่นำไปใช้ได้ทันที
openssl rand คืออะไร?
openssl rand คือคำสั่งย่อยในชุดเครื่องมือ OpenSSL ที่ทำหน้าที่สร้าง Cryptographically Strong Pseudo-Random Bytes (ข้อมูลสุ่มที่มีความปลอดภัยทางวิทยาการเข้ารหัสลับ) หมายความว่าค่าที่ได้จะเดาทางได้ยากมาก เหมาะสำหรับการนำไปใช้ในงาน Security ต่าง ๆ
ต่างจากการใช้ฟังก์ชันสุ่มทั่วไปในบางภาษาโปรแกรม (เช่น rand() ในภาษา C หรือ Math.random() ใน JavaScript รุ่นเก่า) ที่อาจมีแพทเทิร์นทำให้แฮกเกอร์คาดเดาผลลัพธ์ล่วงหน้าได้
รูปแบบคำสั่งพื้นฐาน
openssl rand [-ตัวเลือก] [จำนวนไบต์ (Bytes)]
- จำนวนไบต์: คือขนาดของข้อมูลสุ่มที่เราต้องการ (เช่น 16, 32, 64 ไบต์)
- ตัวเลือกยอดนิยม:
-hex: แปลงข้อมูลสุ่มให้อยู่ในรูปของเลขฐาน 16 (Hexadecimal) ที่อ่านง่าย (0-9, a-f)-base64: แปลงข้อมูลสุ่มให้อยู่ในรูปของ Base64 (เหมาะสำหรับเอาไปทำ Password หรือ Token)
ตัวอย่างการใช้งานจริง
สร้างรหัสผ่าน/Token แบบปลอดภัยสูง (แนะนำ)
หากต้องการรหัสผ่านสุ่มที่เอาไปใช้เป็น Secret Key ในไฟล์ .env ของโปรเจกต์ หรือสร้าง Password ที่เดายากมากๆ การแปลงเป็น base64 จะตอบโจทย์ที่สุดครับopenssl rand -base64 32
- ผลลัพธ์ที่ได้จะเป็นแนวๆ นี้:
4qY+N8kXpZ9rWjVb...(ยาวประมาณ 44 ตัวอักษร) - โน้ต: การใช้ 32 ไบต์ (256 บิต) ถือเป็นมาตรฐานความปลอดภัยระดับสูงในปัจจุบัน
สร้าง String เลขฐาน 16 (Hex) สำหรับ Salt หรือ API Key
ในงานบางประเภท เช่น การทำ Password Salting หรือสร้าง Session ID ที่ต้องการให้อยู่ในรูปแบบ Hex String (0-9, a-f) ให้ใช้ -hex
openssl rand -hex 16
- ผลลัพธ์ที่ได้:
a1b2c3d4e5f67890abcdef1234567890 - ข้อสังเกต: ผลลัพธ์ในรูปแบบ Hex จะมีความยาวเป็น 2 เท่า ของจำนวนไบต์ที่ระบุเสมอ (เพราะ 1 ไบต์แทนด้วยตัวอักษร Hex 2 ตัว) ดังนั้น สั่งสุ่ม 16 ไบต์ จะได้ข้อความยาว 32 ตัวอักษร
สร้างไฟล์สุ่มข้อมูลดิบ (Raw Binary)
ถ้าคุณต้องการสร้างไฟล์ที่มีข้อมูลสุ่มแบบดิบ ๆ (มักใช้ทดสอบการรับส่งข้อมูล หรือสร้างคีย์เข้ารหัสตรงๆ) สามารถดักเอา Output ไปลงไฟล์ได้เลยโดยไม่ต้องระบุ -hex หรือ -base64openssl rand 64 > secret.bin
คำสั่งนี้จะสร้างไฟล์ชื่อ secret.bin ขนาด 64 ไบต์ที่บรรจุข้อมูลสุ่มแบบ Binary เอาไว้
สรุป: ควรเลือกกี่ Bytes ดี?
- 16 Bytes (128 bits): เพียงพอสำหรับรหัสผ่านทั่วไป, Session ID หรือ API Key ทั่วไป
- 32 Bytes (256 bits): แนะนำสำหรับ Webhook Secrets, JWT Secret Key, หรือคีย์หลักของระบบที่ต้องการความปลอดภัยสูงมาก
- 64 Bytes (512 bits): ปลอดภัยสูงสุด มักใช้ในงานเฉพาะทาง เช่น คีย์สำหรับฟังก์ชันแฮชชั้นสูง (HMAC-SHA512)
ข้อควรระวัง: ทุกครั้งที่กดรันคำสั่ง ค่าที่ได้จะเปลี่ยนไปเรื่อย ๆ และไม่สามารถกู้คืนค่าเดิมได้ ดังนั้นถ้าจะเอาไปใช้เป็น Encryption Key หรือ Secret Key อย่าลืมคัดลอกไปเก็บไว้ในที่ปลอดภัยทันทีนะครับ
อ่านเพิ่มเติม