เข้ารหัสข้อความด้วยรหัสผ่าน

พิมพ์ข้อความ ตั้งรหัสผ่าน แล้วรับข้อความที่มีแต่รหัสผ่านนั้นเปิดได้ การเข้ารหัสทำโดย Web Crypto ที่ติดมากับเบราว์เซอร์ของคุณเอง ใช้ AES-256-GCM และยืดรหัสผ่านด้วย PBKDF2 ทั้งข้อความและรหัสผ่านไม่ถูกส่งไปไหนทั้งสิ้น ด้านล่างเราเขียนรูปแบบไฟล์ไว้ครบพร้อมสคริปต์ Python สั้น ๆ ที่อ่านมันได้ ข้อความที่คุณเข้ารหัสวันนี้จึงเปิดได้ในอีกสิบปี ไม่ว่าเว็บนี้จะยังอยู่หรือไม่

ต้องการทำอะไร

ไม่มีทางกู้คืนได้เลย ถ้าลืมรหัสผ่าน ข้อความนั้นหายไปถาวร ไม่ใช่เพราะนโยบาย แต่เพราะไม่มีใครเก็บสำเนากุญแจไว้ รวมถึงเราเองด้วย

ความยาวกุญแจ
ความยากในการเดา

ค่านี้คือเวลาที่ใช้แปลงรหัสผ่านของคุณให้เป็นกุญแจ ความช้าคือสิ่งที่ป้องกันคุณ เพราะคนที่ไล่เดารหัสผ่านต้องจ่ายเวลานี้ทุกครั้งที่เดาหนึ่งครั้ง ค่าปกติคือ 600,000 รอบ ราวหนึ่งวินาทีบนโน้ตบุ๊ก และหลายวินาทีบนมือถือ

ผลลัพธ์เป็น

เข้ารหัสไฟล์ข้อความ ไม่ใช่แค่ข้อความสั้น ๆ

เครื่องมือนี้รับข้อความ ไม่ได้รับไฟล์ แต่สำหรับไฟล์ข้อความธรรมดา ความต่างนั้นแทบไม่มีผล ทำครบรอบได้ในสี่ขั้น

  1. เปิดไฟล์ด้วยโปรแกรมแก้ข้อความอะไรก็ได้ แล้วเลือกทั้งหมด
  2. วางลงในช่องข้อความด้านบน ตั้งรหัสผ่าน แล้วกดทำงาน
  3. คัดลอกผลทั้งก้อน รวมทั้ง LU1 ที่อยู่ข้างหน้าด้วย แล้วบันทึกเป็นไฟล์ใหม่ ใช้ .txt ได้ เพราะผลลัพธ์เป็นตัวอักษรพิมพ์ได้ธรรมดา จึงรอดผ่านอีเมล แชท และการคัดลอกวางโดยไม่เสียหาย
  4. ลบไฟล์ต้นฉบับทิ้ง ถ้าจุดประสงค์คือไม่ให้ใครอ่านได้ ไฟล์ที่เข้ารหัสแล้วซึ่งวางอยู่ข้าง ๆ ไฟล์ต้นฉบับนั้นไม่ได้ป้องกันอะไรเลย

เวลาจะอ่านกลับ ให้วางก้อนที่เข้ารหัสไว้ลงไปแล้วใส่รหัสผ่านเดิม เครื่องมือจะรู้เองว่าข้อความนี้เป็นของมัน แล้วสลับไปโหมดถอดรหัสให้อัตโนมัติ

กรณีที่ไม่ควรใช้วิธีนี้

สิ่งที่คุณมีควรใช้
โน้ต รหัสผ่านที่จะส่งให้ใคร ไฟล์ตั้งค่า ข้อความไม่กี่หน้า หน้านี้
ไฟล์ PDF ที่ต้องส่งอีเมล ใส่รหัสผ่านให้ PDF ไปเลย โปรแกรมอ่านของปลายทางจะถามเอง ไม่ต้องมีขั้นตอนคัดลอกวาง และไม่ต้องส่งวิธีใช้ไปด้วย
รูปถ่าย ตารางคำนวณ ไฟล์ zip อะไรก็ตามที่ไม่ใช่ข้อความ 7-Zip หรือไฟล์บีบอัดที่ใส่รหัสผ่านได้ของระบบปฏิบัติการเอง การแปลงไฟล์ไบนารีเป็น Base64 แล้วยัดผ่านช่องข้อความนั้นทำได้ แต่ทรมาน
ทั้งโฟลเดอร์ หรือโน้ตบุ๊กที่อาจถูกขโมย เข้ารหัสทั้งดิสก์ FileVault บนแมค BitLocker บนวินโดวส์ LUKS บนลินุกซ์ ติดตั้งมาให้อยู่แล้ว และป้องกันทุกอย่าง ไม่ใช่เฉพาะสิ่งที่คุณนึกได้ว่าต้องเข้ารหัส
ไฟล์ใหญ่ ไม่ใช่หน้านี้ ข้อความวิ่งผ่านช่องกรอกในเบราว์เซอร์และถูกเก็บในหน่วยความจำทั้งก้อน จึงสบายกับข้อความไม่กี่ร้อยกิโลไบต์ แต่ไม่สบายกับไฟล์ log สิบเมกะไบต์

เข้ารหัสไฟล์รายการรหัสผ่านที่เก็บเป็นข้อความเปล่า

ถ้าคุณเจอไฟล์ที่มีรหัสผ่านเก็บเป็นข้อความเปล่า ๆ แล้วอยากให้มันไม่เป็นแบบนั้น คำตอบตรงไปตรงมาคือ การเข้ารหัสไฟล์เป็นทางแก้อันดับสอง และควรรู้ข้อจำกัดของมัน

ใช้โปรแกรมจัดการรหัสผ่านดีกว่า Bitwarden, 1Password, KeePassXC รวมถึงตัวที่มากับ Apple และ Google แก้ปัญหาที่แท้จริงได้ ปัญหาไม่ได้อยู่ที่ไฟล์อ่านออก แต่อยู่ที่รายการรหัสผ่านต้องถูกถอดรหัสทุกครั้งที่ใครต้องการแค่รายการเดียว และของที่ต้องถอดวันละห้าครั้งจะค่อย ๆ กลายเป็นของที่เปิดทิ้งไว้ตลอด โปรแกรมจัดการจะล็อกไว้ระหว่างการใช้งาน กรอกรหัสผ่านให้โดยไม่ต้องเอามาให้คุณดู และบอกได้ด้วยว่าคุณใช้รหัสไหนซ้ำบ้าง การนำเข้าไฟล์ข้อความเข้าโปรแกรมพวกนี้ใช้เวลาไม่ถึงนาที

กรณีที่การเข้ารหัสไฟล์ยังเป็นทางเลือกที่ถูก คือคุณกำลังเก็บถาวรรหัสผ่าน ที่เลิกใช้แล้วแต่ลบไม่ได้ หรือส่งชุดหนึ่งให้ใครครั้งเดียวจบ หรือเก็บรหัสกู้คืนบัญชี ที่หยิบมาใช้ปีละสองครั้ง กรณีพวกนี้โปรแกรมจัดการเกินความจำเป็น และก้อนเดียวที่ล็อกไว้คือคำตอบที่พอดี หน้านี้ทำเรื่องนี้ได้ดี

ถ้ารหัสผ่านพวกนั้นเปิดโล่งมานานแล้ว

การเข้ารหัสตอนนี้ไม่ได้ช่วยอะไรกับช่วงเวลาที่มันอ่านได้ ให้ถือว่าอะไรก็ตามที่เข้าถึงไฟล์นั้นได้ ได้รหัสผ่านไปแล้ว แล้วไปเปลี่ยนตัวที่สำคัญ การเข้ารหัสปกป้องความลับได้จากนี้ไป แต่เรียกความลับที่หลุดไปแล้วกลับคืนไม่ได้

ประโยคเดียวกันในอีกความหมาย

"เข้ารหัสรหัสผ่านที่เก็บเป็นข้อความเปล่าทั้งหมด" ยังเป็นคำตอบของข้อสอบความปลอดภัย เรื่องเซิร์ฟเวอร์ที่เก็บรหัสผ่านของผู้ใช้ด้วย และในกรณีนั้นคำตอบคือ อย่าเข้ารหัสเลย เพราะการเข้ารหัสย้อนกลับได้ แปลว่าเซิร์ฟเวอร์ต้องถือกุญแจ ที่เปลี่ยนรหัสผ่านทุกตัวกลับเป็นข้อความเปล่าได้ รหัสผ่านต้องถูก แฮช แทน ด้วยฟังก์ชันช้าที่ออกแบบมาเพื่องานนี้โดยเฉพาะ ได้แก่ argon2id, scrypt หรือ bcrypt และแต่ละรหัสผ่านมี salt ของตัวเอง ไม่มีอะไรบนเซิร์ฟเวอร์ย้อนแฮชกลับได้ ฐานข้อมูลที่ถูกขโมยจึงไม่เท่ากับรหัสผ่านที่ถูกขโมย การตรวจสอบทำโดยแฮชสิ่งที่ผู้ใช้พิมพ์แล้วเทียบกัน ถ้าคุณกำลังเก็บรหัสผ่านของคนอื่น นั่นคือคำตอบ และหน้านี้ไม่ใช่เครื่องมือสำหรับงานนั้น

ค่าตั้งแต่ละตัวทำอะไร และตัวไหนสำคัญจริง

มีสามอย่างที่ปรับได้ด้านบน และมีแค่อย่างเดียวที่เปลี่ยนความยากในการเจาะจริง ๆ

ค่าตั้งเปลี่ยนอะไรควรปรับไหม
AES-256 หรือ AES-128 ความยาวกุญแจ ไม่ต้อง ทั้งคู่ยังไม่เคยถูกเจาะ และ 128 บิตก็เกินกำลังการไล่เดาทุกแบบไปไกลมากแล้ว ที่ตั้ง 256 ไว้เพราะมันไม่ได้แพงขึ้นเลย
เร็ว ปกติ ช้า จำนวนรอบ PBKDF2 คือเวลาที่ใช้แปลงรหัสผ่านของคุณเป็นกุญแจ ค่าปกติคือ 600,000 รอบ ราวหนึ่งวินาทีบนโน้ตบุ๊ก ปรับลงได้อย่างเดียว และเฉพาะตอนใช้มือถือที่ช้ามาก คนที่ไล่เดารหัสผ่านต้องจ่ายค่านี้ทุกครั้งที่เดาหนึ่งครั้ง นี่จึงเป็นค่าที่กำหนดว่าเขาเดาได้กี่ครั้งต่อวินาที
รหัสผ่านของคุณ ทุกอย่าง อยู่ที่ตัวนี้ทั้งหมด ดูข้างล่าง

จำนวนรอบกับความยาวกุญแจคือส่วนที่คนชอบมาปรับเล่น และไม่ใช่จุดที่ความแข็งแรงอยู่ วลีรหัสผ่านสี่คำเพิ่มความยากในการเดาได้มากกว่าตัวเลือกอื่นทั้งหมดในหน้านี้รวมกัน เพราะผู้โจมตีไม่ได้โจมตี AES เขาไล่เดารหัสผ่าน และ 600,000 รอบทำได้แค่คูณต้นทุนของการเดาแต่ละครั้ง การคูณจำนวนที่น้อยอยู่แล้วก็ยังได้จำนวนที่น้อยอยู่ดี

คร่าว ๆ คือ คำที่ใช้กันทั่วไปแล้วต่อท้ายด้วยตัวเลข ถูกเดาได้ในไม่กี่วินาทีแม้ตั้งไว้ที่ช้าที่สุด ส่วนคำสุ่มสี่คำนั้นไม่มีใครสร้างเครื่องมาเดาไหว ถ้าต้องการสักอัน เครื่องสุ่มรหัสผ่าน บนเว็บนี้สร้างได้ทั้งสองแบบ และแสดงวิธีคำนวณให้ดูด้วย

สิ่งที่มันไม่ได้ปิดบัง

ก้อนที่เข้ารหัสแล้วประกาศรูปแบบของตัวเองอยู่ในตัว มันขึ้นต้นด้วย LU1 และความยาวใกล้เคียงกับความยาวข้อความของคุณ คนที่ดักได้ระหว่างทางจึงรู้ว่ามีการส่งข้อความ รู้คร่าว ๆ ว่ายาวเท่าไหร่ และรู้ว่าอะไรเป็นคนสร้าง เรื่องนี้จริงกับการเข้ารหัสทรงนี้ทั้งหมด และเป็นเหตุผลที่เราประกาศรูปแบบไว้แทนที่จะปิดบัง การซ่อนความจริงที่ว่าคุณส่งอะไรออกไปเป็นคนละปัญหาและใช้เครื่องมือคนละชุด

คำถามที่พบบ่อย

ข้อความของฉันถูกอัปโหลดไหม

ไม่ การเข้ารหัสเกิดขึ้นในแท็บนี้ด้วย Web Crypto ที่ติดมากับเบราว์เซอร์ นโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้ ต่อให้โค้ดอยากส่งข้อความหรือรหัสผ่านออกไปก็ส่งไม่ได้

ข้างในทำอะไรบ้าง

รหัสผ่านของคุณถูกยืดเป็นกุญแจด้วย PBKDF2-HMAC-SHA256 พร้อมเกลือสุ่ม 16 ไบต์ จากนั้นข้อความถูกเข้ารหัสด้วย AES-GCM พร้อมค่า nonce สุ่ม 12 ไบต์ AES-GCM เป็นแบบที่ตรวจสอบความถูกต้องได้ด้วย แปลว่าข้อความที่ถูกแก้ระหว่างทางจะถอดไม่ผ่าน ไม่ใช่ถอดออกมาเป็นอย่างอื่นเงียบ ๆ และทุกขั้นตอนที่ว่ามาไม่มีอันไหนที่เราเขียนเอง ทั้งหมดเรียกใช้ของที่อยู่ในเบราว์เซอร์

ทำไมไม่ให้เลือกอัลกอริทึม

เพราะการให้เลือกคือการเปิดช่องให้เลือกผิด Web Crypto มี AES-CBC และ AES-CTR ให้ด้วย แต่ทั้งสองตัวไม่ตรวจสอบความถูกต้องในตัวเอง คนที่ดักแก้ข้อความระหว่างทางทำได้ แล้วการถอดรหัสจะคืนข้อความที่ดูสมเหตุสมผลออกมาโดยไม่มีอะไรเตือน ส่วนความยาวกุญแจกับจำนวนรอบให้เลือกได้ เพราะทุกตัวเลือกตรงนั้นปลอดภัยหมด

ถ้าลืมรหัสผ่านล่ะ

ข้อความนั้นหายไป ไม่มีลิงก์รีเซ็ตและไม่มีประตูหลัง เพราะไม่มีอะไรให้รีเซ็ต กุญแจมีอยู่แค่ชั่วขณะที่กำลังใช้งาน และไม่มีสำเนาถูกเก็บไว้ที่ไหนเลย ทั้งที่นี่และที่อื่น จดรหัสผ่านไว้ในที่ที่คุณไว้ใจก่อนจะพึ่งเครื่องมือนี้

ถ้าเว็บนี้หายไปล่ะ

ข้อความของคุณยังเปิดได้ รูปแบบไฟล์ถูกประกาศไว้ครบด้านล่าง และเก็บทุกอย่างที่คนอ่านต้องใช้ไว้ในตำแหน่งไบต์ที่แน่นอน สคริปต์ Python บนหน้านี้จึงถอดรหัสทุกอย่างที่เครื่องมือนี้สร้างได้ นี่คือเหตุผลทั้งหมดที่เราเขียนมันไว้

ใช้กับเรื่องที่สำคัญจริง ๆ ได้ไหม

ถ้าเป็นการส่งรหัสผ่านหรือเอกสารให้เพื่อนร่วมงาน ใช้ได้ เพราะเป็นวิทยาการเข้ารหัสมาตรฐาน ทำโดยเบราว์เซอร์ และเราบอกค่าที่ใช้ไว้ครบ แต่ถ้าจะป้องกันคนที่ตั้งใจเล่นงานคุณและมีทั้งเวลาและเงิน ต้องเข้าใจว่ามันทำอะไรได้และไม่ได้ มันปกป้องเนื้อความ แต่ไม่ได้ปิดบังว่าคุณส่งอะไรออกไป และมันแข็งแรงได้เท่ากับรหัสผ่านที่คุณตั้งเท่านั้น