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

ทรูคริปต์เป็นชุดคำสั่งที่ถูกสร้างขึ้นเพื่อใช้ในการเข้ารหัสพื้นที่เก็บข้อมูลแบบ 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 ระดับ
	1. ซ่อนพื้นที่ที่เก็บข้อมูล (hidden volumn)
	2. ไม่ให้สามารถระบุได้ว่ามี TrueCrypt ติดตั้งอยู่ (ไม่สามารถแยกแยะ TrueCrypt จากข้อมูลลวงที่โปรแกรมสร้างขึ้นมาได้)
* กระบวนการเข้ารหัสที่ใช้ คือ AES-256, Serpent และ Twofish โดยใช้การดำเนินการแบบ XTS

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

1. เก็บ 512 ไบต์แรกจาก volume ลงบนแรม โดย 64 ไบต์แรกคือ salt
2. ข้อมูลที่จะถอดรหัสอยู่ในแรมโดย 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)

1. * AES-256, Serpent, Twofish, AES-Serpent, AES-Twofish-Serpent, etc.
	* Mode of operation: XTS, LRW (deprecated/legacy) , CBC (deprecated/legacy)
	* Key size (s)
2. การถอดรหัสจะสำเร็จเมื่อมันตรวจสอบ 4 ไบต์แรกของรหัสแอสกีว่ามีข้อความว่า "TRUE" และ CRC-32 checksum ของ 256 ไบต์สุดท้ายของข้อความที่ถอดรหัส (volume header) ตรงกับค่าที่อยู่ในไบต์ที่ 8 หรือไม่ ถ้าค่าไม่ตรงจะกลับไปที่ข้อ 2 ใหม่และถ้าไม่ตรงอีกจะถูกปิดการเชื่อมต่อและหยุดการทำงาน
3. ถ้าใส่รหัสผ่านถูกต้อง จะทำการเชื่อมต่อและสามารถดึงข้อมูลมาใช้งานได้

ดูเพิ่ม
-------

* FreeOTFE

อ้างอิง
-------

1. ↑

แหล่งข้อมูลอื่น
---------------

* TrueCrypt