ปรกติแล้วรหัสผ่านมีไว้เพื่อแสดงตนเข้าใช้งานถูกมั้ยครับ? แล้วโดยหลักการของรหัสผ่านนั้นผมก็เคยอธิบายไว้แล้วในหัวข้อ “อวสานรหัสผ่าน” แต่ในบางกรณีรหัสผ่านก็ไม่ได้ใช้เพื่อรักษาความปลอดภัยเพียงอย่างเดียว มันยังสามารถประยุกต์ใช้ในงานด้านอื่นได้อีกด้วย ซึ่งบางคนน่าจะเคยผ่านประสบการณ์เหล่านี้มาแล้ว นั่นก็คือการใช้รหัสผ่านเพื่อบันทึกสถานะล่าสุดของเกมที่เราเล่นอยู่!!!
ในสมัยก่อนเครื่องเล่นวีดีโอเกมจะไม่มีระบบความทรงจำสำหรับสำรองข้อมูล ดังนั้นเราจึงไม่สามารถจะบันทึกสถานะล่าสุดของเกมที่เราเล่นได้ จึงได้มีความคิดว่าน่าจะเป็นการดี หากจะใช้รหัสผ่านซึ่งประกอบไปด้วยตัวอักษรผสมตัวเลขหลายสิบหลัก เป็นตัวเก็บบันทึกสถานะล่าสุดของการเล่นเกมแทน
รหัสผ่านในลักษณะนี้จะแตกต่างจากรหัสผ่านสำหรับรักษาความปลอดภัย เพราะแก่นของรหัสผ่านสำหรับรักษาความปลอดภัยนั้น จะต้องทำยังไงก็ได้เพื่อไม่ให้ถอดรหัสได้ ดังนั้นหากต้องการตรวจสอบความถูกต้อง ก็จะต้องนำรหัสที่ถูกเข้ารหัสแล้วมาเปรียบเทียบกัน เพื่อตรวจสอบความถูกต้องแทน (ดูจาก : อวสานรหัสผ่าน)
แต่รหัสผ่านเพื่อการจดจำแบบนี้ต้องการให้ถอดรหัสได้ เพราะรหัสที่ถอดได้จะเป็นองค์ประกอบต่าง ๆ ของสถานะล่าสุดของข้อมูลที่ต้องการจะเรียกขึ้นมา!!!
ไม่ค่อยมีใครพูดถึงหรือกล่าวถึงอัลกอริทึมในการแปลงรหัสผ่านแบบนี้มากนัก เพราะมันคงจะล้าสมัยแล้ว แต่ไม่เป็นไรผมลองคิดอัลกอริทึมเล่น ๆ ให้พวกเราดูกันดีกว่า จะได้เห็นว่าโม้แล้วสามารถนำไปปฏิบัติได้ด้วย
ผมจะสมมติว่าผมสร้างเกมบนเว็บแล้วกันนะ โดยเป็นเกมมวยไทยประเภท RPG เนื้อหาของเกมก็เหมือนกับเกม RPG ทั่ว ๆ ไป คือการให้ผู้เล่นเก็บประสบการณ์ไปเรื่อย ๆ เพื่อเพิ่มพลังทักษะให้กับตัวเอง
เนื่องจากผมขี้เกียจที่จะต้องเก็บข้อมูลต่าง ๆ ของผู้เล่นเอาไว้ที่ server อีกทั้งผมก็ขี้เกียจจะทำระบบสมาชิกด้วย ดังนั้นจึงน่าจะดีกว่าถ้าระบบสามารถที่จะสังเคราะห์รหัสผ่านออกมา เพื่อให้ผู้เล่นจดไปเก็บไว้กับตัวเอง และเมื่อถึงเวลาอยากจะเล่นต่อ ก็ให้นำรหัสผ่านดังกล่าวมากรอกใส่ แล้วระบบก็จะแปลงรหัสผ่านให้กลายเป็นข้อมูลต่าง ๆ เพื่อให้ผู้เล่นได้เล่นต่อจากที่ตัวเองเล่นค้างเอาไว้ต่อไป
เป็นการผลักภาระความรับผิดชอบเกี่ยวกับข้อมูลไปให้กับผู้เล่น ไม่ต้องเปลืองทรัพยากรบนเครื่อง server ของเราแต่ประการใด (มุขเก่า ๆ เอามาเล่าใหม่)
ทีนี้เรามาดูรายละเอียดกันดีกว่า ว่าสิ่งที่จะต้องใช้เพื่อสังเคราะห์เป็นรหัสผ่านคืออะไรบ้าง ซึ่งถ้าดูจากตัวอย่างข้างต้นก็จะได้รายละเอียดคือ
- Mr. PeeTai ศิษย์ฝั่งธนฯ (ชื่อ)
- 6 (พลังหมัด)
- 7 (พลังเท้า)
- 5 (พลังเข่า)
- 9 (พลังศอก)
- 100 (ความอึด)
- 20 (จำนวนครั้งที่ชนะ)
- 5 (จำนวนครั้งที่เสมอ)
- 10 (จำนวนครั้งที่แพ้)
เอ้อ … นึกอัลกอริทึมไม่ออกอ่ะ ว่าจะเอาข้อมูลพวกนี้มายัดรวมกันกลายเป็นรหัสผ่านยาว ๆ ซัก 20 ตัวได้ไง (เพราะมีภาษาไทยปนอยู่ด้วยอ๊ะดิ๊) งั้นเอาไว้คิดออกแล้วค่อยเขียนต่อแล้วกัน ฮา ^-^
[tags]คอมพิวเตอร์,ซอฟต์แวร์,รหัสผ่าน,การจดจำ,ฮาร์ดแวร์[/tags]
โอ้ การเข้ารหัสของข้อมูลแบบนี้!! เคยคิดจะทำสมัยมัธยมตอนเขียนเกมส์แนวทามาก็อต
(ใช้ภาษา pascal/c เขียนอยู่เลย)
ช่วงนั้นไม่รู้จะจัดเก็บข้อมูลผู้เล่นยังไงดี ก็นึกไปถึงการเข้ารหัสแบบนี้ แต่ก็ต้องล้มเลิกไป เพราะไม่มีเวลา(ได้งูกินหางมาแทน หุหุ)
ได้อัลกอลิทึ่มสวยๆเมื่อไร แบ่งกันมั่งเน้อ เผื่อจะจุดประกายไฟในตัว อิอิ
ง่ายๆก็ compress/encrypt ตามด้วย encode
เช่น เอาข้อมูลทั้งหมดมาต่อกัน แล้วยัดใส่ gzip ยัด AES กันโดนแคร็ก แล้วเอาข้อมูลที่ได้มาเข้า BASE64 ให้ได้ string
ตอนแกะก็ทำกลับกัน
ปัญหาคือไซต์ของพาสเวิร์ดอาจไม่คงที่(อยากให้คงที่อาจแก้ได้โดย padding)
ข้อมูลที่เก็บได้ไม่มากนัก เพราะยาวเกิน คนเล่นคงจำไม่ไหว
โดนแคร็กง่าย เพราะข้อมูลไปกองอยู่กับไคลเอนต์หมด เขาสร้างตัวละครซัก 5-6 ตัว มี attribute ต่้างกัน 1-2 ที่ต่อตัว มันจะเข้าข่าย known text attack เลย
นึกออกตอนเล่น เกมส์ แฟมิคอม พวก Rockman
กับ เกมส์บอย บาง เกมส์
ประเภทเดียวกันหรือเปล่าครับ ?
อ่านแล้วนึกถึง ドラゴンクエスト ภาคหนึ่ง ใช้ตัวอักษร ฮิรางานะ 20 ตัว เก็บข้อมูลทั้ง status, location, accessories ของตัวละครทั้งหมดที่เราเล่น
ป.ล. ไปค้นใน youtube ก็เจอ อันนี้ http://www.youtube.com/watch?v=87ozwyPOvRM
ผมยังคิดไม่ออกเลยครับคุณ redcap แฮะ ๆ
โอ้ คุณ house คิดได้แล้ว เจ๋งอ่ะ วิธีซับซ้อนมากเลย ส่วนเรื่องขนาดของรหัสไม่คงที่คงไม่เป็นประเด็นมั๊งครับ แต่ถ้ายาวเกินก็อาจจะจดผิดไปเลยก็ได้เน้อะ
ใช่ครับ แบบนั้นแหล่ะ ผมล่ะชอบ
อ่าฮ่า dragon quest ซะด้วย จริง ๆ แล้วผมไม่เคยอ่านการ์ตูนเรื่องนี้หรือเล่นเกมนี้เลยอ่ะคุณ wat รู้สึกว่ามันจะดังน้อยกว่า dragon ball ผมเลยไม่ค่อยสนใจเท่าไหร่ อิ อิ
ถ้าเกม famicom ที่ใช้รหัสนี่มีเยอะเลยนะครับ
อย่าง bomberman , ซึบาสะ , rockman , คุนิโอะ
เพราะระบบนี้เอาไว้ชดเชยที่เครื่อง famicom save game ไม่ได้
เจ๋งครับ น่าสนใจมากเลย
เสร็จแล้วบอกนะครับจะลองtest
เยี่ยมมากคับ