ป้ายกำกับ: ไบต์

openssl rand: สร้างข้อมูลสุ่มopenssl rand: สร้างข้อมูลสุ่ม

การสร้างสุ่มข้อมูล (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 หรือ -base64
openssl 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 อย่าลืมคัดลอกไปเก็บไว้ในที่ปลอดภัยทันทีนะครับ


อ่านเพิ่มเติม