# ทรูคริปต์
ทรูคริปต์  เป็นซอฟต์แวร์ประเภทโอเพนซอร์ซสำหรับการเข้ารหัสบนดิสก์เสมือนจริง สามารถใช้บนระบบปฏิบัติการวินโดวส์ แมคโอเอส หรือลินุกซ์

ทรูคริปต์เป็นชุดคำสั่งที่ถูกสร้างขึ้นเพื่อใช้ในการเข้ารหัสพื้นที่เก็บข้อมูลแบบ real-time การเข้ารหัสแบบ real-time หมายถึงก่อนที่เราจะ load หรือ save ข้อมูล ข้อมูลเหล่านั้นจะมีการเข้ารหัสหรือถอดรหัสแบบอัตโนมัติ จะทำให้พื้นที่ที่เก็บข้อมูลที่ถูกเข้ารหัสเหล่านั้นจะไม่สามารถถูกอ่าน หรือถูกทำการถอดรหัสได้โดยปราศจากการใช้ password/keyfile (s) หรือกุญแจการถอดรหัสที่ถูกต้องโดยการเข้ารหัสจะครอบคลุมทั้งระบบของแฟ้มข้อมูล เช่น ชื่อไฟล์ ชื่อแฟ้มข้อมูล metadata และอื่น ๆ

 ลักษณะการทำงาน 

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

ยกตัวอย่างเช่นเรามีไฟล์ .avi ที่เป็นไฟล์วิดีโอที่ถูกบรรจุอยู่ในพื้นที่ที่มีการติดตั้งทรูคริปต์ (ดังนั้นไฟล์วิดีโอนี้จะถูกทำการเข้ารหัสไว้ทั้งหมดแล้ว) ผู้ใช้งานต้องทำการกรอก password/keyfile ที่ถูกต้อง และทำการเปิดพื้นที่ที่ถูกเข้ารหัสนั้นขึ้นมา เมื่อผู้ใช้งานเปิดไฟล์วิดีโอ ระบบปฏิบัติการจะเรียกใช้งานแอปพลิเคชันที่เกี่ยวข้องกันชนิดของไฟล์วิดีโอนั้น ไฟล์วิดีโอจะทำการเรียกข้อมูลเริ่มต้นบางส่วนจากพื้นที่ที่ถูกเข้ารหัสไปยังหน่วยความจำเพื่อเตรียมพร้อมในการเล่น ในขณะที่ข้อมูลบางส่วนถูกเรียก ทรูคริปต์จะทำการถอดรหัสข้อมูลวิดีโอในแรมอย่างอัตโนมัติ ข้อมูลที่ถูกถอดรหัสแล้วจะถูกเก็บไว้ในแรมและถูกใช้งานต่อไป ในขณะที่ข้อมูลบางส่วนกำลังถูกเล่นอยู่นั้น โปรแกรมที่ทำการเล่นข้อมูลเหล่านั้นจะทำการเรียกข้อมูลถัดไปและถูกดำเนินการถอดรหัสเหมือนเดิม กระบวนการในการทำงานนี้เรียกว่า การเข้ารหัสและการถอดรหัสแบบ on-the-fly โดยการเข้ารหัสหรือถอดรหัสของทรูคริปต์นั้นสามารถกระทำการได้ทำทุกชนิดของแฟ้มข้อมูล

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

 คุณสมบัติหลัก 

 สร้างการเข้ารหัสดิสก์แบบเสมือนจริงภายในแฟ้มข้อมูล และใส่กลับไปเป็นดิสก์จริง ๆ ได้
 สามารถเข้ารหัสได้ครอบคลุมทั้ง partition หรือจะเข้ารหัสทั้งหมดของอุปกรณ์เก็บข้อมูล เช่น USB flash drive หรือ hard drive
 การเข้ารหัสทั้งในส่วนที่เป็นการเข้ารหัสทั้ง partition หรือการเข้ารหัสทั้ง drive สามารถทำการเข้ารหัสได้ในขณะที่ตัวเก็บข้อมูลเหล่านั้นมี Windows ติดตั้งอยู่
 การเข้ารหัสสามารถกำหนดได้ว่าจะเป็นแบบอัตโนมัติ แบบ real-time (on-the-fly) หรือแบบ transparent
 การปฏิเสธความไม่มีเหตุผล (plausible deniability) หรือก็คือการป้องกันระบบไม่ให้เปิดเผย password กับผู้บุกรุก ประกอบด้วย 2 ระดับ
 ซ่อนพื้นที่ที่เก็บข้อมูล (hidden volumn)
 ไม่ให้สามารถระบุได้ว่ามี TrueCrypt ติดตั้งอยู่ (ไม่สามารถแยกแยะ TrueCrypt จากข้อมูลลวงที่โปรแกรมสร้างขึ้นมาได้)
 กระบวนการเข้ารหัสที่ใช้ คือ AES-256, Serpent และ Twofish โดยใช้การดำเนินการแบบ XTS

 โครงสร้างการเข้ารหัส 

 เก็บ 512 ไบต์แรกจาก volume ลงบนแรม โดย 64 ไบต์แรกคือ salt
 ข้อมูลที่จะถอดรหัสอยู่ในแรมโดย parameter ที่จะพูดถึงต่อไปนี้เป็น unknown แต่มันจะใช้ในกระบวนการพิจารณาการเข้าถึงของข้อมูล โดย parameter มีดังนี้
 key to decrypt the volume header
PRF (specified in PKCS #5 v2.0) จะใช้สร้าง header key โดยสร้างมาจาก function เหล่านี้ HMAC-SHA-512, HMAC-RIPEMD-160, HMAC-Whirlpool
เมื่อผู้ใช้งานกรอก password เข้ามา salt จะอ่านค่านั้นและส่งต่อไปยัง header key derivation function ที่จะสร้างตัวเลข sequence ออกมาชุดนึงจาก header encryption key และ secondary header key (XTS mode)
 AES-256, Serpent, Twofish, AES-Serpent, AES-Twofish-Serpent, etc.
 Mode of operation: XTS, LRW (deprecated/legacy) , CBC (deprecated/legacy)
 Key size (s)
 การถอดรหัสจะสำเร็จเมื่อมันตรวจสอบ 4 ไบต์แรกของรหัสแอสกีว่ามีข้อความว่า "TRUE" และ CRC-32 checksum ของ 256 ไบต์สุดท้ายของข้อความที่ถอดรหัส (volume header) ตรงกับค่าที่อยู่ในไบต์ที่ 8 หรือไม่ ถ้าค่าไม่ตรงจะกลับไปที่ข้อ 2 ใหม่และถ้าไม่ตรงอีกจะถูกปิดการเชื่อมต่อและหยุดการทำงาน
 ถ้าใส่รหัสผ่านถูกต้อง จะทำการเชื่อมต่อและสามารถดึงข้อมูลมาใช้งานได้