Plausible Deniability

พอดีวันนี้โปรแกรม TrueCrypt 5.0 ออกมา เลยนึกถึงเรื่องหนึ่งที่เคยนั่งคิดเอาไว้ คือเรื่องของการปฏิเสธความรับผิดชอบได้อย่างสมบูรณ์

แนะนำก่อนว่า TrueCrypt นั้นเป็นโปรแกรมเพื่อการเข้ารหัสดิสก์ ที่หากไม่มีรหัสที่ถูกต้องแล้ว แม้จะได้ตัวดิสก์ไป ก็ไม่สามรถอ่านข้อมูลใดๆ ขึ้นมาได้

โดยเรื่องของการเข้ารหัสข้อมูลทั้งหมดในดิสก์นั้น ทางฝั่งวินโดวส์เองก็มีนานานพอดูแล้ว แต่ว่า EFS (Encrypted File System) ของทางวินโดวส์นั้นมีเพื่อการรักษาความลับของข้อมูลเพียงเท่านั้น หากตามพรบ. แล้ว เจ้าหน้าที่ก็จะสามารถสั่งให้มีการถอดรหัสออกมาได้

แต่จะเกิดอะไรขึ้นถ้าเจ้าหน้าที่ ไม่สามารถพิสูจน์ได้ว่ามีข้อมูลในดิสก์อยู่จริง!!!!

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

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

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

น่าสนใจมากกว่ามีใครพยายามทำวิจัยแก้เรื่องนี้กันบ้างแล้วรึยังนะ?

 

IDE

IDE ตัวสุดท้ายที่ผมได้ใช้งานอย่างจริงจังคือ Turbo Pascal สมัยเรียนมหาวิทยาลัยปีหนึ่ง และที่ใช้งานในยุคนั้นมีเหตุผลเดียวคือผมไม่รู้จักคอมไพล์เลอร์ว่ามันจะไปอยู่แยกจากเอดิตเตอร์ได้ยังไง (แล้วจะสั่งคอมไพล์ตรงไหน????)

ต่อมาเมื่อเข้าสู่โลกของ vim, gcc, และ make แล้ว ผมก็ไม่ได้กลับไปใช้ IDE ใดๆ อีกเลย ด้วยความที่คิดว่าพิมพ์มือเอาเร็วกว่าที่ต้องไปนั่งไล่เมนู

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

หลายคนที่เพิ่งเรียนเขียนโปรแกรมอาจจะไม่รู้ว่า โค้ดที่เราเขียนลงไปนั้น มักจะผ่านกระบวนการจากซอฟต์แวร์หลายต่อหลายตัว โดยทั่วไปเท่าที่นึกออกก็จะมี Pre-Processor, Compiler, Assembler, Linker, และ Loader

Pre-Processor นั้นถ้าใครเขียนภาษาซีก็เคยเจอคำสั่งที่อยู่หลังเครื่องหมาย # ทั้งหลาย เช่น define และ include คำสั่งเหล่านี้เป็นคำสั่งที่จะถูกประมวลผลโดยซอฟต์แวร์ตัวนี้ โดยมากแล้วมักเป็นการแทนที่ เช่นเอาตัวเลขไปแทนที่คำที่กำหนด หรือไม่ก็เอาโค้ดจากไฟล์หนึ่งไปวางไว้อีกไฟล์ (include)

Compiler หลายคนเข้าใจผิดว่าคอมไพล์เลอร์ให้ผลลัพธ์เป็นโปรแกรมที่รันได้เสมอ เช่น .exe ในวินโดวส์ แต่แท้จริงแล้วคอมไพล์เลอร์นั้นเป็นตัวแปลงจากภาษาที่เราใช้พัฒนาซอฟต์แวร์ มาเป็นภาษาสำหรับเครื่องซึ่งโดยทั่วไปแล้วก็เป็นภาษาแอสแซมบลี

Assembler ภาษาแอสแซมบลีนั้นอาจจะอ่านยากมาก แต่ที่จริงแล้วภาษาแอสแซมบลีนั้นเป็นภาษาระดับล่างสุดที่คนอาจจะอ่านเข้าใจได้ แต่เครื่องคอมพิวเตอร์ซึ่งเข้าใจแต่เลขฐานสองก็ยังไม่เข้าใจมันอยู่ดี ตัวแอสแซมเบลอนี้เองที่จะเข้ามาแปลงไฟล์เท็กที่เป็นภาษาแอสแซมบลีให้เป็นข้อมูลที่ซีพียูเข้าใจได้จริงๆ

Linker เวลาทำงานจริงซอฟต์แวร์จำนวนมากสามารถใช้ฟังก์ชั่นหลายๆ อย่างร่วมกันได้ อย่างเช่น printf ดังนั้นแล้วจึงเป็นเรื่องที่ดีที่จะแยกไฟล์เหล่านี้เอาไว้ต่างหาก ด้วยเหตุผลด้านพื้นที่ดิสก์ และเวลาที่มีการปรับปรุงในเรื่องของความปลอดภัยจะได้มีผลทีเดียวหลายๆ โปรแกรม ตัว Linker นี้จะรับอินพุตเป็นไฟล์จากแอสแซมเบลอ มีสองแบบคือแบบ static ที่ก่อนโปรแกรมจะทำงานได้ต้องทำการรวมไลบรารีเข้าไว้ในไฟล์ก่อน กับแบบ dynamic ที่เมื่อรันโปรแกรมแล้วจึงมีการเรียก dynamic-linker มาเชื่อมไลบราลีต่างๆ เข้าด้วยกันอีกที แบบหลังนี่หลายๆ คนน่าจะเคยเห็นไฟล์ dll ในวินโดวส์ นั่นหล่ะครับที่มันต้องเอามาเชื่อมกันตอนรัน

Loader เป็นโปรแกรมตัวสุดท้ายที่จะเอาโปรแกรมของเราไปวางไว้ในเมมโมรี ก่อนที่จะเริ่มป้อนโปรแกรมของเราเข้าซีพียู เราไม่ค่อยเห็นโปรแกรมตัวนี้เท่าใหร่เพราะว่ามันมักจะผูกกับระบบปฏิบัติการอย่างแนบแน่น

 

preparing migration

หลังๆ โพสน้อยลงเนื่องจากเหตุผลหลายๆ อย่าง แต่ตอนนี้กำลังเตรียมย้ายจาก wordpress ไปใช้ blogger แทนแล้วครับ

ด้วยความที่มันมีปัญหาหลายๆ อย่าง เดี๋ยวคงได้ไปเจอกันใน WordPress ต่อไป

 

new world

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

เวลาที่เราต้องเข้าไปในโลกที่เราไม่เคยไป และที่สำคัญคือ จริงๆ แล้วไม่เคยมีใครไปเช่นกัน

เรากำลังเดินทางเข้าไปสู่โลกใหม่

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

คำแนะนำหลายๆ อย่างมีประโยชน์… แต่ไม่ใช่ว่ามันจะถูกต้องไปทั้งหมด

ไม่มีเฉลยในการเดินทางเข้าไปยังโลกใหม่ ทุกอย่างคือการตัดสินใจของเราเอง

เราทำถูกหรือไม่ หรือเรากำลังทำทุกอย่างพังลงไปต่อหน้าต่อตา ไม่มีใครรู้

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

เราจะโตขึ้นผ่านทางการเรียนรู้ที่ไม่เหมือนใครในโลก

เราจะเรียนรู้ที่จะคิด เราจะเรียนรู้ที่จะตัดสินใจ

และเราจะเรียนรู้ที่จะอยู่ในโลกใหม่ที่ไม่มีใครเคยเข้ามา