อักขระตัวอักษรและตัวเลข: คำจำกัดความ การใช้งานด้านการเข้ารหัส และความปลอดภัย
หกสิบสอง นั่นคือจำนวนสัญลักษณ์ที่แตกต่างกันทั้งหมดที่มีอยู่ เมื่อมีคนบอกว่า "ใช้เฉพาะตัวอักษรและตัวเลขเท่านั้น" ตัวพิมพ์ใหญ่ 26 ตัว ตัวพิมพ์เล็ก 26 ตัว และตัวเลข 10 ตัว หากไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก จำนวนสัญลักษณ์จะลดลงเหลือสามสิบหก ตัวเลขทั้งสองมีความสำคัญ เพราะตัวระบุทางดิจิทัลเกือบทุกตัวที่คุณเคยพิมพ์ ไม่ว่าจะเป็นที่อยู่กระเป๋าเงิน รหัสผ่าน Wi-Fi แฮชธุรกรรม หรือโทเค็น GitHub ล้วนสร้างขึ้นจากชุดย่อยที่เลือกจากสัญลักษณ์ทั้งหกสิบสองตัวนั้น
การเลือกชุดย่อยใด และเหตุผลนั้น เป็นส่วนที่คำอธิบายส่วนใหญ่ละเลยไป นอกจากนี้ยังเป็นส่วนที่เชื่อมโยงคำจำกัดความแบบสารานุกรมของอักขระตัวอักษรและตัวเลขเข้ากับความปลอดภัยในทางปฏิบัติของกระเป๋าเงินคริปโตของคุณ บทความนี้จะอธิบายถึงจำนวนอักขระ มาตรฐานที่อยู่เบื้องหลัง วิธีที่การเข้ารหัสสมัยใหม่เลือกชุดย่อย และสิ่งที่หน่วยงานระดับชาติของสหรัฐฯ เกี่ยวกับรหัสผ่านกล่าวถึงเรื่องนี้ คำแนะนำบางอย่างได้เปลี่ยนแปลงไปในลักษณะที่คำแนะนำด้านความปลอดภัยส่วนใหญ่ยังตามไม่ทัน
อักขระตัวอักษรและตัวเลขคืออะไร? คำจำกัดความและจำนวน
เริ่มจากคำจำกัดความก่อน อักขระตัวอักษรและตัวเลข คือ ตัวอักษร A–Z (ทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) หรือตัวเลขทศนิยม 0–9 นั่นคือทั้งหมด จากนั้นการคำนวณก็ชัดเจน — ตัวอักษร 26 ตัวต่อตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก บวกกับตัวเลข 10 ตัว จะได้อักขระที่แตกต่างกัน 62 ตัวเมื่อพิจารณาตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และ 36 ตัวเมื่อไม่พิจารณา ส่วนที่เหลือถือเป็น "อักขระพิเศษ" เครื่องหมายวรรคตอน ช่องว่าง สัญลักษณ์ทางคณิตศาสตร์ ตัวอักษรที่มีเครื่องหมายเน้นเสียง อีโมจิ — สิ่งเหล่านี้ไม่นับเป็นอักขระตัวอักษรและตัวเลข
โดยปกติแล้ววิศวกรจะเข้าใจความหมายนี้ผ่านตัวย่อสองแบบ เครื่องมือ POSIX เช่น grep, sed และ awk จะรู้จัก `[:alnum:]` ซึ่งตรงกับอักขระหกสิบสองตัวข้างต้น ส่วนรูปแบบ regex สมัยใหม่ส่วนใหญ่ — Python, JavaScript, Java, PCRE — จะใช้ `\w` แทน ข้อเสียของ `\w` คือมันแอบใส่เครื่องหมายขีดล่างเข้าไปด้วย เครื่องหมายขีดล่างนั้นไม่ใช่ตัวอักษรและตัวเลขอย่างเป็นทางการ ไวยากรณ์การเขียนโปรแกรมส่วนใหญ่ถือว่ามันเป็นเพียงสัญลักษณ์เสริม นั่นเป็นเหตุผลที่คำนำหน้าคีย์ Stripe `sk_live_` และคำนำหน้าคีย์ AWS `AKIA` ผสมเครื่องหมายขีดล่างและตัวอักษรพิมพ์ใหญ่กับตัวเลขโดยไม่มีใครสังเกตเห็น
คำนี้มาจากไหน? มาจากบัตรเจาะรูเสียด้วยซ้ำ อุปกรณ์คำนวณของ IBM ในช่วงทศวรรษ 1930 ต้องการคำเดียวสำหรับรหัสที่ผสมตัวอักษรและตัวเลข และคำว่า "alphanumeric" ก็ติดมาจนถึงทุกวันนี้ จนกระทั่งถึงเครื่อง IBM 1401 ในช่วงต้นทศวรรษ 1960 คำนี้ก็กลายเป็นคำศัพท์มาตรฐานในวงการคอมพิวเตอร์ธุรกิจ การแบ่งแยกนี้มีผลในทางปฏิบัติ — ช่องข้อมูลที่ระบุว่า "alphanumeric" จะยอมรับตัวอักษรหรือตัวเลขใดๆ ก็ได้ ในขณะที่ช่องข้อมูลที่ระบุว่าเป็น "ตัวเลขเท่านั้น" จะปฏิเสธตัวอักษรโดยสิ้นเชิง จากนั้นคำนี้ก็แพร่หลายไปยังป้ายทะเบียนรถ รหัสธนาคาร IBAN ตัวย่อบนแป้นพิมพ์โทรศัพท์ รหัสสินค้า และอีกหลายๆ ที่
ความแตกต่างระหว่างการคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กกับการไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กนั้นสำคัญกว่าที่คิด ความซับซ้อนของรหัสผ่านจะเพิ่มขึ้นเป็นสองเท่าเมื่ออนุญาตให้ใช้ตัวพิมพ์ใหญ่ ที่อยู่ Base58 ของ Bitcoin จงใจเก็บทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ส่วน Base32 จงใจไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก การเลือกใช้แต่ละแบบล้วนเป็นการแลกเปลี่ยนระหว่างความสามารถในการแสดงออกและความผิดพลาดของมนุษย์ หากเลือกผิด ผู้คนอาจสูญเสียเงินจากข้อผิดพลาดในการพิมพ์

จาก ASCII สู่ Unicode: ประวัติทางเทคนิคโดยสังเขป
"แบบอักษรผสมตัวอักษรและตัวเลข" ในปัจจุบันคือสิ่งที่รอดพ้นจากสงครามมาตรฐานที่กินเวลานานถึงหกสิบปี ผู้ใช้ส่วนใหญ่ตกอยู่ตรงกลางและไม่เคยสังเกตเห็น
ASCII มาก่อน มันถูกวางจำหน่ายในปี 1963 โดยสมาคมมาตรฐานอเมริกัน และได้รับการกำหนดอย่างเป็นทางการในอีกห้าปีต่อมาในชื่อ ANSI X3.4-1968 มีการแก้ไขสองครั้ง คือในปี 1977 และปี 1986 เวอร์ชันปี 1968 กำหนดให้ตัวอักษร A พิมพ์ใหญ่มีค่าไบต์ที่ 65 ตัวอักษร a พิมพ์เล็กมีค่าไบต์ที่ 97 และตัวเลข 0-9 มีค่าไบต์ที่ 48 ถึง 57 ลองเปิดโปรแกรมแก้ไขข้อความของคุณดูสิ ไบต์ 'A' ยังคงมีค่าไบต์ที่ 65 เหมือนเดิม ไม่เปลี่ยนแปลงเลยในรอบหกสิบปี
เป็นเวลากว่าสี่ทศวรรษที่ชุดตัวอักษรและตัวเลข ASCII เป็นชุดตัวอักษรและตัวเลขที่ใช้กันอย่างแพร่หลาย จนกระทั่งเว็บทั่วโลกเข้ามา การใช้งานเจ็ดบิตจึงไม่เพียงพออีกต่อไป รูปแบบการทำงานผิดพลาดนั้นน่าเกลียดน่ากลัว อีเมลผิดเพี้ยน ฐานข้อมูลพัง เว็บไซต์ภาษาญี่ปุ่นที่ทำงานได้อย่างสมบูรณ์แบบในโตเกียว แต่กลับดูเหมือนกำแพงเครื่องหมายคำถามบนแล็ปท็อปของสหรัฐฯ Unicode เข้ามาในปี 1991 ด้วยความทะเยอทะยานอย่างมาก นั่นคือ การกำหนดหมายเลขที่ไม่ซ้ำกันให้กับทุกตัวอักษรในทุกภาษาที่มนุษย์เคยเขียนลงไป UTF-8 ตามมาในปี 1992 ในฐานะการเข้ารหัสที่ใช้ Unicode ในเครือข่ายทั่วไป จุดเด่นของมันคือความเข้ากันได้แบบย้อนหลัง — รหัส 128 จุดแรกของ UTF-8 คือไบต์ ASCII ดั้งเดิมในปี 1968 อย่างแม่นยำ ข้อความภาษาอังกฤษที่ส่งก่อนปี 1991 จึงยังคงใช้งานได้ตลอดไป
การเปลี่ยนแปลงครั้งสำคัญเกิดขึ้นในเดือนธันวาคม ปี 2007 ในเดือนนั้น สถิติการรวบรวมข้อมูลเว็บสาธารณะได้แสดงให้เห็นว่า UTF-8 แซงหน้า ASCII ขึ้นมาเป็นรูปแบบการเข้ารหัสที่ใช้กันมากที่สุดบนอินเทอร์เน็ต จากนั้นเป็นต้นมา คำว่า "ตัวอักษรและตัวเลข" จึงไม่ได้หมายถึงเฉพาะสัญลักษณ์ ASCII ทั้ง 62 ตัวอีกต่อไป Unicode ได้จัดทำแคตตาล็อกบล็อกตัวอักษรและตัวเลขสำหรับอักษรซีริลลิก กรีก อาหรับ ฮิบรู และอักษรจีน ญี่ปุ่น และเกาหลี (CJK) โดยแต่ละอักษรจะมีตัวอักษรและตัวเลขของตนเอง
ในทางปฏิบัติแล้ว ซอฟต์แวร์ที่ต้องใช้งานข้ามพรมแดนยังคงใช้ชุดอักขระ ASCII ดั้งเดิมเป็นค่าเริ่มต้นอยู่ดี นั่นคือ ตัวอักษรละติน A–Z และตัวเลขอาหรับ 0–9 ไม่มีอย่างอื่น เหตุผลนั้นง่ายมาก เพราะแป้นพิมพ์ทุกตัวสร้างอักขระ ASCII ฐานข้อมูลทุกตัวยอมรับมัน และโปรแกรมประมวลผลนิพจน์ทั่วไป (regex) ทุกตัวรู้จักมัน หากใช้อักขระนอกช่วงที่กำหนด คุณจะพบกับข้อผิดพลาดในการเข้ารหัส ตัวอักษรที่คล้ายกัน และการโจมตีแบบฟิชชิ่ง ซึ่งผมจะกล่าวถึงในภายหลัง
| ระดับ | สมาชิก | นับ | การเขียนย่อ Regex | ตัวอย่าง | |
|---|---|---|---|---|---|
| เรียงตามตัวอักษร | เอ-ซี, เอ-ซี | 52 | `[A-Za-z]` | คำศัพท์ภาษาอังกฤษธรรมดา | |
| ตัวเลข | 0–9 | 10 | `[0-9]` หรือ `\d` | ปีหนึ่ง รหัสไปรษณีย์หนึ่ง | |
| ตัวอักษรและตัวเลข | เอ-ซี, เอ-เอส, 0-9 | 62 | `[A-Za-z0-9]` หรือ `[:alnum:]` | รหัส API, SKU | |
| พิเศษ / สัญลักษณ์ | `!@#$%^&*()_+-=[]{};:'"\ | ,.<>/?` | ~33 (ASCII) | `[^A-Za-z0-9]` | ตัวแก้ไขรหัสผ่าน |
อักขระตัวอักษรและตัวเลขในการเข้ารหัส: ที่อยู่ แฮช และรหัสเริ่มต้น
นี่คือส่วนที่คำอธิบายทั่วไปส่วนใหญ่มักมองข้ามไป ระบบสกุลเงินดิจิทัลไม่เคยใช้ชุดตัวอักษรและตัวเลขครบทั้ง 62 ตัว พวกมันเลือกใช้ ชุดย่อย ที่เลือกมาอย่างระมัดระวัง แต่ละชุดเป็นผลมาจากการประนีประนอมทางวิศวกรรมที่มีการบันทึกไว้ ไม่ใช่เพียงแค่ความสวยงามตามอำเภอใจ
เริ่มจาก Bitcoin ก่อน ที่อยู่ Bitcoin แบบดั้งเดิม (ที่ขึ้นต้นด้วย 1 หรือ 3) จะถูกเข้ารหัสด้วย Base58 ตัวอักษรนี้ได้รับการออกแบบโดย Satoshi Nakamoto ด้วยมือ สูตรคือ นำชุดตัวอักษรและตัวเลข 62 ตัว มาลบออก 4 ตัว ได้แก่ เลขศูนย์, ตัวพิมพ์ใหญ่ O, ตัวพิมพ์ใหญ่ I และตัวพิมพ์เล็ก l ทำไมต้องลบ 4 ตัวนี้? ลองเขียนลงบนกระดาษโน้ตด้วยลายมือที่ไม่สวยนัก แล้วเดินออกไป กลับมาในอีก 5 นาที แล้วพยายามแยกแยะดู คุณจะทำไม่ได้ นั่นคือปัญหาทั้งหมดที่ Base58 ถูกสร้างขึ้นมาเพื่อแก้ไข จึงเหลือตัวอักษร 58 ตัว ที่อยู่แบบดั้งเดิมโดยทั่วไปจะมีตัวอักษรยาวประมาณ 26-35 ตัว ซึ่งสั้นพอที่จะคัดลอกด้วยมือได้หากจำเป็นจริงๆ
SegWit เปิดใช้งานในเดือนสิงหาคม 2017 พร้อมกันนั้นก็มีรูปแบบที่อยู่ Bitcoin รูปแบบที่สองคือ Bech32 ซึ่งกำหนดไว้ใน BIP-173 Bech32 มีความแตกต่างออกไป การคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่หายไปโดยสิ้นเชิง – ที่อยู่ทุกที่อยู่ใช้ตัวพิมพ์เล็กทั้งหมด มีการตัดอักขระออกไปสี่ตัว ได้แก่ เลข 1, b, i และ o ตัวอักษรและตัวเลขที่เหลืออีกสามสิบสองตัวมี checksum ในตัว checksum นี้จะตรวจจับข้อผิดพลาดในการพิมพ์ตัวอักษรเดี่ยวเกือบทุกตัวโดยอัตโนมัติ Taproot ซึ่งเปิดใช้งานตั้งแต่เดือนพฤศจิกายน 2021 ได้ปรับปรุงรูปแบบเป็น Bech32m (BIP-350) หลังจากที่นักวิจัยพบข้อบกพร่องในกรณีพิเศษในคณิตศาสตร์ดั้งเดิม
Ethereum เลือกใช้แนวทางที่สาม นั่นคือการใช้เลขฐานสิบหก ที่อยู่ Ethereum จะเริ่มต้นด้วย `0x` ตามด้วยอักขระเลขฐานสิบหกจำนวนสี่สิบตัว รวมทั้งหมดสี่สิบสองตัว เลขฐานสิบหกจะจำกัดตัวอักษรและตัวเลขให้เหลือเพียงสิบหกตัว ได้แก่ ตัวเลข 0-9 และตัวอักษร a-f เท่านั้น ทางเลือกนี้ดูลงตัวในปี 2015 แต่พอมาถึงเวอร์ชัน 2026 หลังจากที่ผู้ใช้ต้องเพ่งมองเลขฐานสิบหกดิบๆ ใน MetaMask มาหลายปี มันก็ดูไม่สวยงาม EIP-55 จึงเข้ามาแก้ไข โดยการแปลงตัวอักษรบางตัวให้เป็นตัวพิมพ์ใหญ่ตามรูปแบบที่ได้มาจากแฮช Keccak-256 ของที่อยู่ตัวพิมพ์เล็ก ผลลัพธ์ที่ได้คือการตรวจจับการพิมพ์ผิดโดยอัตโนมัติ EIP-55 ตรวจจับการพิมพ์ผิดได้ด้วยความน่าเชื่อถือประมาณ 99.975 เปอร์เซ็นต์ อัตราการพลาดอยู่ที่ประมาณ 0.0247 เปอร์เซ็นต์ ซึ่งถือว่าน้อย ไม่ใช่ศูนย์
ค่าแฮชเป็นตัวอย่างที่ง่ายที่สุด ค่าแฮช SHA-256 จะมีขนาด 256 บิต แสดงผลเป็นอักขระเลขฐานสิบหก 64 ตัว Keccak-256 ของ Ethereum ก็ให้ผลลัพธ์ที่มีความยาวเท่ากัน รหัสธุรกรรมของ Bitcoin หรือ txid คือค่าแฮช SHA-256 ของธุรกรรมนั้นเอง ดังนั้น txid จึงประกอบด้วยตัวอักษรและตัวเลขในเลขฐานสิบหก 64 ตัว มันอาจดูน่ากลัวในโปรแกรมสำรวจบล็อก แต่จริงๆ แล้วมันเป็นเพียงตัวอักษรและตัวเลขเท่านั้น
วลีเริ่มต้น (Seed phrases) ทำลายรูปแบบเดิม การกู้คืนกระเป๋าเงิน BIP-39 เป็นจุดเดียวที่คริปโตเคอร์เรนซีหลุดพ้นจากรูปแบบตัวอักษรและตัวเลข และกลับเข้าสู่รูปแบบตัวอักษรล้วนๆ มาตรฐานนี้เข้ารหัสเอนโทรปี 128 หรือ 256 บิตเป็นคำภาษาอังกฤษ 12 หรือ 24 คำที่ดึงมาจากรายการคำศัพท์คงที่ 2,048 คำ แต่ละคำใช้ตัวพิมพ์เล็กเท่านั้น ไม่มีตัวเลข ไม่มีตัวพิมพ์ผสม ทำไม? เพราะเป้าหมายของการออกแบบคือบุคคลที่เขียนคำบนกระดาษในเวลาตี 3 หลังจากโทรศัพท์แบตหมด และตัวเลขทำให้เกิดความกำกวมที่ตัวอักษรไม่มี
| ตัวระบุ | ชุดอักขระ | ความยาว | ตัวอย่าง (ตัดทอน) |
|---|---|---|---|
| ที่อยู่ Bitcoin แบบดั้งเดิม | เบส58 (58 ตัวอักษร ไม่มี 0/0/1/1) | 26–35 | `1A1zP1eP5QGefi2…` |
| Bitcoin Bech32 (SegWit) | 32 ตัวพิมพ์เล็ก ไม่มี 1/b/i/o | ~42 | `bc1qar0srrr7xfk…` |
| ที่อยู่ Ethereum | hex (0–9, a–f) + `0x` | 42 | `0xde0B295669a91…` |
| SHA-256 / txid | หกเหลี่ยม | 64 | `e3b0c44298fc1c1…` |
| คำ BIP-39 | เฉพาะตัวอักษร a–z เท่านั้น | 3–8 ต่อคำ | `ละทิ้งความสามารถได้…` |
แต่ละส่วนย่อยล้วนเป็นการออกแบบที่เน้นมนุษย์เป็นศูนย์กลาง ซึ่งซ่อนอยู่ภายในระบบทางเทคนิคที่ซับซ้อน
รหัสผ่านตัวอักษรและตัวเลข: NIST กล่าวไว้อย่างไรในปี 2024
คำแนะนำเกี่ยวกับการตั้งรหัสผ่านส่วนใหญ่บนเว็บไซต์สาธารณะนั้นล้าสมัยไปหลายปีแล้ว เช่น การใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กผสมกัน การเพิ่มตัวเลข การใส่ตัวอักษรพิเศษอย่างน้อยหนึ่งตัว และการเปลี่ยนรหัสผ่านทุกเก้าสิบวัน กฎเหล่านี้เคยเป็นที่ยอมรับกันมานานกว่าสองทศวรรษ แต่ปัจจุบันสถาบันมาตรฐานและเทคโนโลยีแห่งชาติของสหรัฐอเมริกาได้ละทิ้งกฎเหล่านี้อย่างเป็นทางการแล้ว
เอกสารเผยแพร่พิเศษ NIST 800-63B ซึ่งเป็นหน่วยงานของรัฐบาลกลางที่ให้คำแนะนำเกี่ยวกับเอกลักษณ์ดิจิทัล ได้สรุปฉบับแก้ไขครั้งที่ 4 ในเดือนกันยายน 2024 คำแนะนำใหม่นี้มีความโดดเด่นตรงที่ได้ตัดข้อกำหนดออกไปหลายส่วน คำแนะนำเกี่ยวกับความยาวขั้นต่ำของรหัสผ่านแบบยืนยันตัวตนด้วยปัจจัยเดียวเพิ่มขึ้นเป็น 15 ตัวอักษร คำแนะนำเกี่ยวกับกฎการกำหนดองค์ประกอบของตัวอักษรถูกเปลี่ยนเป็น "ห้าม" กล่าวคือ บริการต่างๆ จะต้องไม่กำหนดให้ใช้คลาสตัวอักษรเฉพาะ การหมดอายุของรหัสผ่านเป็นระยะๆ ซึ่งเป็นการหมุนเวียนทุกๆ 90 วันที่ทุกคนไม่ชอบ ก็ถูกยกเลิกไปเช่นกัน แทนที่กฎเหล่านั้น NIST กำหนดให้บริการต่างๆ ตรวจสอบรหัสผ่านที่ส่งมากับรายการบล็อกของข้อมูลประจำตัวที่ถูกบุกรุกที่ทราบแล้ว
การเปลี่ยนแปลงนี้ได้รับการอธิบายด้วยหลักการทางคณิตศาสตร์ของเอนโทรปี ชุดตัวอักษรและตัวเลข 62 ตัว ใช้พื้นที่ประมาณ 5.95 บิตต่อตัวอักษร ชุดตัวอักษร ASCII ที่พิมพ์ได้ทั้งหมด 95 ตัว (ตัวอักษรและตัวเลขรวมถึงอักขระพิเศษ) ใช้พื้นที่ 6.57 บิต การเพิ่มอักขระพิเศษทั้งหมดจะใช้พื้นที่เพิ่มขึ้น 0.62 บิตต่อตัวอักษร การเพิ่มตัวอักษรอีกหนึ่งตัวจะใช้พื้นที่เพิ่มขึ้นครบ 5.95 บิต ความยาวมีผลต่อความซับซ้อนมากกว่าหลายเท่า
รายงานการตรวจสอบการรั่วไหลของข้อมูลปี 2025 ของ Verizon พบว่า ข้อมูลประจำตัวคิดเป็น 22 เปอร์เซ็นต์ของจุดเข้าถึงการรั่วไหลที่ได้รับการยืนยันทั้งหมด การโจมตีด้วยการใช้ข้อมูลประจำตัวซ้ำโดยอัตโนมัติ (Credential stuffing) คิดเป็น 19 เปอร์เซ็นต์ของการพยายามยืนยันตัวตนโดยเฉลี่ย และสูงสุดถึง 44 เปอร์เซ็นต์ ผู้ใช้ 49 เปอร์เซ็นต์ใช้รหัสผ่านเดียวกันในหลายบริการ ปัญหาเหล่านี้ไม่สามารถแก้ไขได้ด้วยการกำหนดให้ใช้ตัวอักษรพิมพ์ใหญ่เพียงอย่างเดียว
รหัสผ่านตัวอักษรและตัวเลขที่ยาวกว่าโดยไม่มีอักขระพิเศษนั้นยากต่อการถอดรหัสมากกว่ารหัสผ่านสั้นๆ ที่ประกอบขึ้นเพื่อให้ตรงตามเกณฑ์ความซับซ้อน หากธนาคารของคุณยังคงบังคับให้คุณสร้างรหัสผ่านสิบสองตัวอักษรโดยมีตัวอักษรพิมพ์ใหญ่หนึ่งตัว ตัวเลขหนึ่งตัว และอักขระพิเศษหนึ่งตัว นโยบายดังกล่าวถือว่าไม่สอดคล้องกับมาตรฐานของรัฐบาลกลางสหรัฐฯ อย่างเป็นทางการแล้ว
อักขระตัวอักษรและตัวเลขปรากฏที่อื่นอีกหรือไม่
หากมองข้ามเรื่องการเข้ารหัสลับไปแล้ว รหัสผ่านและสตริงตัวอักษรและตัวเลขก็ยังคงปรากฏให้เห็นในทุกระบบที่ต้องการตัวระบุที่มนุษย์สามารถพิมพ์ได้และคอมพิวเตอร์สามารถวิเคราะห์ได้โดยไม่คลุมเครือ
รหัสธนาคารเป็นตัวอย่างที่เข้าใจง่าย รหัส IBAN อาจมีความยาวได้ถึง 34 ตัวอักษรและตัวเลข และมักขึ้นต้นด้วยรหัสประเทศ ISO สองตัวอักษร รหัส SWIFT/BIC มี 8 หรือ 11 ตัวอักษร ป้ายทะเบียนรถแตกต่างกันไปตามแต่ละประเทศ ป้ายทะเบียนของสหราชอาณาจักรแตกต่างจากของเยอรมนีอย่างสิ้นเชิง แต่ทั้งสองแบบก็เป็นส่วนย่อยของตัวอักษรและตัวเลขจากกลุ่มสัญลักษณ์ 62 ตัวเดียวกัน หมายเลขประจำตัวรถ (VIN) มี 17 ตัวอักษรทั่วโลก และ VIN จงใจไม่ใช้ตัวอักษร I, O และ Q เพื่อให้มองเห็นได้ชัดเจนแตกต่างจากตัวเลข
คีย์ API เป็นตัวอย่างที่พบได้ทั่วไป แต่ผู้ใช้ส่วนใหญ่ไม่เคยใส่ใจที่จะดู คีย์ใช้งานจริงของ Stripe จะเปิดด้วย `sk_live_` ตามด้วยตัวอักษรและตัวเลข คีย์การเข้าถึงของ AWS จะเปิดด้วย `AKIA` ตามด้วยตัวอักษรและตัวเลขอีกสิบหกตัว โทเค็นการเข้าถึงส่วนบุคคลของ GitHub ที่ออกหลังปี 2021 จะเปิดด้วย `ghp_` คำนำหน้าเหล่านั้นเป็นตัวอักษรและตัวเลขเช่นกัน ซึ่งถูกเลือกมาเพื่อให้ผู้ให้บริการสามารถสแกนที่เก็บข้อมูลสาธารณะและบันทึกต่างๆ เพื่อหาคีย์ที่รั่วไหล ในหลายกรณี การสแกนนั้นจะตรวจจับความผิดพลาดได้ก่อนที่ผู้โจมตีจะทำได้
รหัส QR สมควรได้รับการกล่าวถึงโดยสังเขป มาตรฐาน ISO/IEC 18004 กำหนด "โหมดตัวอักษรและตัวเลข" เฉพาะที่เข้ารหัสชุดอักขระ 45 ตัวโดยเฉพาะ — ตัวอักษรพิมพ์ใหญ่ ตัวเลข ช่องว่าง และเครื่องหมายวรรคตอนจำนวนหนึ่ง — ได้อย่างมีประสิทธิภาพมากกว่าโหมดไบต์ทั่วไป รหัส QR ที่มีเฉพาะตัวอักษรและตัวเลขพิมพ์ใหญ่จะจัดเก็บข้อมูลได้มากกว่าเนื้อหาเดียวกันที่เข้ารหัสเป็นไบต์ดิบประมาณ 1.6 เท่าต่อช่องสี่เหลี่ยม
Base32, Base58, Base64: เมื่อคริปโตเลือกใช้ชุดย่อย
มีมาตรฐานการเข้ารหัสอยู่จำนวนหนึ่งที่ใช้เฉพาะในการแปลงเลขฐานสองเป็นชุดย่อยของตัวอักษรและตัวเลข โดยเอกสารอ้างอิงคือ RFC 4648 ซึ่งเผยแพร่โดย IETF ในปี 2549 โดยกำหนดวิธีการเข้ารหัสไว้สามวิธี
เลขฐานสิบหก (Hex) เป็นเลขฐานที่ง่ายที่สุด ชื่อทางการคือ Base16 ประกอบด้วยอักขระ 16 ตัว ได้แก่ 0–9 และ a–f ใช้สำหรับที่อยู่ Ethereum, แฮชเข้ารหัสลับ และการดีบักระดับต่ำเกือบทุกอย่างที่ต้องการอ่านไบต์ดิบ ส่วน Base32 นั้นน่าสนใจกว่า ตัวอักษร 32 ตัวนี้ถูกเลือกมาเพื่อให้ไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก และในบางรูปแบบจะตัดตัวเลข 0, 1, 8 และ 9 ที่อาจทำให้สับสนออกไป ใครก็ตามที่ตั้งค่าการตรวจสอบสิทธิ์แบบสองขั้นตอนและพิมพ์รหัสลับลงใน Google Authenticator ก็ได้พิมพ์ Base32 ไปแล้ว — ส่วนใหญ่โดยไม่รู้ตัว
Base64 คือเครื่องมือหลักในการทำงาน ประกอบด้วยตัวอักษรและตัวเลข 62 ชุด บวกกับสัญลักษณ์ `+` และ `/` ส่วนเวอร์ชันที่ปลอดภัยสำหรับ URL จะเปลี่ยนสัญลักษณ์เหล่านั้นเป็น `-` และ `_` Base64 คือสิ่งที่ใช้ในการส่งไฟล์แนบในอีเมล เข้ารหัสข้อมูล URL ภายใน HTML และบรรจุ JSON Web Token สำหรับ OAuth
Base58 ของ Bitcoin นั้นอยู่นอกเหนือมาตรฐาน RFC 4648 Satoshi Nakamoto สร้างมันขึ้นมาโดยอิสระ เป้าหมายแตกต่างออกไป — คือมนุษย์ต้องพิมพ์ที่อยู่ใหม่ ไม่ใช่ประสิทธิภาพด้านไบต์ต่อตัวอักษร — และผลลัพธ์ที่ได้คือตัวอักษรเฉพาะที่ไม่มีใครใช้ Base85 หรือบางครั้งเรียกว่า Ascii85 นั้นทำงานในทิศทางตรงกันข้าม มันบรรจุสี่ไบต์ลงในห้าตัวอักษรและปรากฏในไฟล์ PDF และ PostScript ซึ่งความหนาแน่นที่เพิ่มขึ้นนั้นคุ้มค่ากับความสามารถในการอ่านที่ลดลง

ข้อผิดพลาดที่พบบ่อย: ความสับสนทางสายตาและสิ่งของที่คล้ายคลึงกัน
เหตุผลเดียวกับที่ระบบเข้ารหัสเลือกใช้ชุดย่อยของตัวอักษรและตัวเลข ก็เป็นเหตุผลที่ทำให้ทุกคนทำผิดพลาดเช่นกัน ตัวอักษรเพียงไม่กี่คู่เท่านั้นที่ก่อให้เกิดปัญหามากที่สุด
ตัวอักษรที่มักทำให้สับสน: เลขศูนย์และตัวโอพิมพ์ใหญ่ เลขหนึ่ง ตัวแอลพิมพ์เล็ก ตัวไอพิมพ์ใหญ่ ตัวแอลพิมพ์เล็กและตัวไอพิมพ์ใหญ่ รหัส Base58 ของ Bitcoin ตัดตัวอักษรทั้งสี่นี้ออกไป ระบบอื่นๆ ใช้มาตรการแก้ไขที่แตกต่างกัน — รหัส VIN ตัดตัว I, O และ Q ออก รหัสทางการเงินบางรหัสตัดตัว O ออกทั้งหมด และคุณอาจพบกฎระเบียบเกี่ยวกับป้ายทะเบียนรถยนต์ของแต่ละประเทศที่ห้ามใช้ตัวอักษรใดก็ตามที่ดูคล้ายกับเลข 0 มากที่สุดในแบบอักษรของประเทศนั้นๆ
ปัญหาที่ซับซ้อนกว่าและเกิดขึ้นใหม่กว่าคือการโจมตีด้วยโฮโมกราฟของยูนิโค้ด แนวคิดนี้ได้รับการบันทึกไว้ในบทความปี 2001 โดย Evgeniy Gabrilovich และ Alex Gontmakher โฮโมกราฟคือการสลับตัวอักษรที่เหมือนกันทางสายตาจากอักษรที่แตกต่างกัน เช่น ตัวอักษร 'а' ของซีริลลิก (U+0430) แทนที่ตัวอักษร 'a' ของละติน (U+0061) หากจดทะเบียนชื่อโดเมนที่มีการแทนที่แบบนี้ คุณก็สามารถสร้างหน้าเว็บฟิชชิ่งที่ดูแยกไม่ออกจากเว็บไซต์ธนาคารจริงได้ เบราว์เซอร์สมัยใหม่จะแสดงการแสดงผล Punycode ดิบๆ เช่น `xn--80akhbyknj4f` เมื่อใดก็ตามที่โดเมนมีการผสมอักษร การป้องกันนี้สามารถตรวจจับการโจมตีได้ส่วนใหญ่ แต่ไม่ใช่ทั้งหมด
วิธีสร้างรหัสผ่านตัวอักษรและตัวเลขที่ปลอดภัยใน 2026
มีกฎสามข้อ ทั้งหมดนี้ได้มาจากหลักคณิตศาสตร์ของ NIST โดยตรง
ข้อแรก: ความยาวสำคัญกว่าประเภทของตัวอักษร ควรเลือกความยาวอย่างน้อยสิบหกตัวอักษรขึ้นไป กฎนี้ใช้ได้ไม่ว่าระบบจะยอมรับเฉพาะตัวอักษรและตัวเลข หรือชุดตัวอักษร ASCII ที่พิมพ์ได้ทั้งหมดก็ตาม
ข้อสอง: ถ้าคุณต้องจำรหัสผ่าน ให้ใช้วลีรหัสผ่าน คำสุ่มสี่คำจากรายการขนาดใหญ่ — รายการของ Diceware เป็นตัวเลือกมาตรฐาน — มีประสิทธิภาพดีกว่ารหัสผ่านสั้นๆ เกือบทุกแบบที่มนุษย์คิดขึ้นมาเอง
ข้อสาม: สำหรับเรื่องอื่นๆ ให้ใช้โปรแกรมจัดการรหัสผ่าน ให้โปรแกรมจัดการรหัสผ่านสร้างสตริงตัวอักษรและตัวเลขยาวๆ ที่คุณจะไม่ต้องอ่านหรือพิมพ์เองอีกต่อไป เมื่อโปรแกรมจัดการรหัสผ่านจัดการผลลัพธ์แล้ว ความสามารถในการอ่านผลลัพธ์ก็จะไม่สำคัญอีกต่อไป
คู่มืออ้างอิงฉบับย่อ: การนับตัวเลขและตัวอักษร พร้อมตัวอย่าง
มีทั้งหมด 62 รหัสเมื่อพิจารณาตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และ 36 รหัสเมื่อไม่พิจารณา รหัส ASCII 48–57 สำหรับตัวเลข 65–90 สำหรับตัวพิมพ์ใหญ่ และ 97–122 สำหรับตัวพิมพ์เล็ก จับคู่ทั้งชุดด้วย regex `[A-Za-z0-9]` หรือคลาส POSIX `[:alnum:]` กลุ่มสัญลักษณ์ 62 ตัวนี้คือสิ่งที่อยู่เบื้องหลังตัวระบุทางดิจิทัลเกือบทุกตัวที่คุณจะใช้งานในสัปดาห์นี้ ไม่ว่าจะเป็นรหัสผ่าน คีย์ API หมายเลข IBAN ป้ายทะเบียนรถ รหัสธุรกรรม หรือที่อยู่กระเป๋าเงินดิจิทัลทุกอันที่คุณสร้างขึ้น