การเข้ารหัส 64 บิต

โกลอฟนา ที่เก็บข้อมูลแฟลช Comodo Disk Encryption ปกป้องข้อมูลอันมีค่าโดยใช้การเข้ารหัสทุกรูปแบบ การแบ่งส่วน zhorstkogoดิสก์บนระบบ การเข้ารหัสคือกระบวนการเข้ารหัสข้อมูลโดยใช้อัลกอริธึมเฉพาะซึ่งมีเพียงโปรแกรมเข้ารหัสเท่านั้นที่ทราบ ดังนั้นจึงไม่มีใครสามารถอ่านข้อมูลได้การเข้ารหัสเสร็จสิ้น "ทันที" ดังนั้นจึงไม่จำเป็นต้องถอดหรือคีย์คอมพิวเตอร์ใหม่
Comodo Disk Encryption เสนอตัวเลือกการเข้าถึงข้อมูลที่เข้ารหัสมากมายซึ่งคุณสามารถเลือกให้เหมาะกับความต้องการของคุณได้

ตัวเลือกแรกคือการตั้งรหัสผ่านและใช้รหัสผ่านหากคุณต้องการปฏิเสธการเข้าถึงข้อมูลที่ถูกขโมย

  • วิธีการเข้าถึงอีกวิธีหนึ่งคือ
  • Wikoristannya USB
  • สร้างขึ้นเพื่อเป็น "กุญแจ" ในการจัดเก็บข้อมูล

ในการเข้าถึงข้อมูล อุปกรณ์ USB จำเป็นต้องเชื่อมต่อกับคอมพิวเตอร์

ตัวเลือกที่สามคือการกู้คืนรหัสผ่าน

ในการถอดรหัสข้อมูล คุณจะต้องเชื่อมต่ออุปกรณ์และป้อนรหัสผ่าน

  • การเก็บรักษาและการปกป้องข้อมูลอันมีค่าถือเป็นสิ่งสำคัญ ดังที่เคยเป็นมาและจะมีความเกี่ยวข้องมากยิ่งขึ้น
  • การจัดเก็บข้อมูลที่เป็นความลับบนคอมพิวเตอร์เดสก์ท็อปและคอมพิวเตอร์พกพามีความเสี่ยงเพิ่มขึ้นในการสูญเสียข้อมูลอันมีค่า และการใช้ซอฟต์แวร์เช่น Disk Encryption จาก Comodo ก็สามารถแก้ปัญหานี้ได้อย่าลืมเข้ารหัสข้อมูลอันมีค่า เพื่อขโมยข้อมูลจากผู้ใช้คอมพิวเตอร์รายอื่นของคุณ ตลอดจนหลีกเลี่ยงการโจมตีเล็กๆ น้อยๆ จากแฮกเกอร์ คุณสมบัติและฟังก์ชั่นที่สำคัญการปกป้องข้อมูลจากแฮกเกอร์และการเข้าถึงอื่น ๆ ที่ไม่ได้รับอนุญาต

อย่างไรก็ตาม หากแล็ปท็อปของคุณถูกขโมย อาชญากรจะไม่สามารถอ่านข้อมูลที่เข้ารหัสได้

ก่อนที่ปักเป้าจะปรากฏขึ้น อัลกอริธึมที่พัฒนาขึ้นนั้นเป็นกรรมสิทธิ์หรือไม่น่าเชื่อถือ และการกระทำต่างๆ จะถูกเก็บเป็นความลับเสมอ (เช่น Skipjack)

  • อัลกอริธึมได้รับการพัฒนาในปี 1993 โดย Bruce Schneier ในฐานะสิ่งแปลกใหม่และเป็นทางเลือกที่เป็นไปได้แทน DES ที่ล้าสมัยและ IDEA ที่ได้รับสิทธิบัตร
  • ตามคำกล่าวของผู้เขียน เกณฑ์การออกแบบสำหรับปลาปักเป้าคือ:
  • ความเร็ว (การเข้ารหัสบนโปรเซสเซอร์ 32 บิตใช้เวลา 26 รอบ)
  • ความเรียบง่าย (เพื่อลดการดำเนินการอย่างง่ายซึ่งจะช่วยลดความซับซ้อนของการนำอัลกอริทึมไปใช้)

ความกะทัดรัด;

ความทนทานที่สามารถปรับเปลี่ยนได้

  • คำอธิบายของอัลกอริทึม
  • พารามิเตอร์
  • รหัสลับ K (ตั้งแต่ 32 ถึง 448 บิต)

คีย์เข้ารหัส 32 บิต P1-P18

ตารางทดแทนแบบ 32 บิต S1-S4: S1 S1 .. S1 S2 S2 .. S2 S3 S3 .. S3 S4 S4 .. S4

ฟังก์ชัน F(x)

อัลกอริทึมสำหรับการเข้ารหัสบล็อก 64 บิตด้วยอาร์เรย์ที่ใช้ร่วมกัน P และ F(x)

Merezha Feistel ภายใต้ชั่วโมงแห่งการเข้ารหัส

  1. อัลกอริธึมปลาปักเป้า
    • แบ่งออกเป็น 2 ระยะ คือ
      1. การเตรียมการ – การสร้างคีย์สำหรับการเข้ารหัสเบื้องหลังคีย์ลับ
      2. การเริ่มต้นอาร์เรย์ P และ S โดยใช้คีย์ลับ K
        การเริ่มต้นของ P1-P18 ในแถวคงที่ ซึ่งเกิดขึ้นจากเลขฐานสิบหกของตั๊กแตนตำข้าวของตัวเลข pi
    • การดำเนินการ XOR จะดำเนินการบน P1 ด้วย 32 บิตแรกของคีย์ K บน P2 ด้วยอีก 32 บิตที่เหลือเป็นต้น
      1. เนื่องจากคีย์ K สั้นกว่า คีย์จึงถูกใช้แบบวนรอบ
      2. ตารางการเข้ารหัสและการเปลี่ยนคีย์
      3. อัลกอริธึมการเข้ารหัสสำหรับบล็อก 64 บิต vikorist และคีย์เริ่มต้น P1-P18 และตารางแทนที่ S1-S4 เข้ารหัสแถวศูนย์ 64 บิต (0x000000000000000)
  2. ผลลัพธ์จะถูกบันทึกที่ P1, P2

P1 และ P2 ถูกเข้ารหัสด้วยค่าคีย์ที่เปลี่ยนแปลงและตารางการแทนที่

ผลลัพธ์จะถูกเขียนลงใน P3 และ P4

การเข้ารหัสจะดำเนินต่อไปจนกว่าคีย์ P1-P18 และตารางทดแทน S1-S4 ทั้งหมดจะมีการเปลี่ยนแปลง

การเข้ารหัสข้อความโดยใช้คีย์เดียวกับ F(x) โดยการแบ่งส่วนแรกออกเป็นบล็อกขนาด 64 บิต

  • S-box ที่อ่อนแอ (มันสร้างคีย์ที่อ่อนแอที่สอง) หมายความว่า i, j, N=(1,2,3,4) : SN[i]==SN[j]

สิ่งสำคัญคือต้องรักษาความสามารถในการป้องกันการเข้ารหัสลับไว้ภายใต้ F(x) ณ จุดนี้ Serge Vaudenay กล่าว โดยพูดถึงการมีอยู่ของคีย์อ่อนระดับเล็กๆ (ซึ่งสร้าง S-box ที่อ่อนแอ): ความน่าเชื่อถือของรูปลักษณ์ของ S-box ที่อ่อนแอนั้นยังมีมาแต่โบราณคุณยังสามารถดู Blowfish เวอร์ชันที่เรียบง่ายกว่าได้ด้วยฟังก์ชัน F(x) ที่คุ้นเคยและคีย์อ่อน

คุณต้องเลือกตัวเลือกใด

ข้อความที่ซ่อนอยู่

(t คือจำนวนรอบ และสัญลักษณ์แสดงถึงการดำเนินการลบส่วนจำนวนเต็มของตัวเลข)

การโจมตีนี้อาจส่งผลต่ออัลกอริทึมเท่านั้น
สำหรับข้อความปิดที่จำเป็น และสำหรับตัวเลือกที่มีการป้อนข้อมูล F(x) และปุ่มทางเลือก จำเป็นต้องมีข้อความปิดที่จำเป็น

การโจมตีนี้ไม่มีผลกับปักเป้าที่มี 16 รอบ

จอห์น เคลซีย์ ยุติการโจมตีและปล่อยให้ปักเป้า 3 รอบโจมตี
ขึ้นอยู่กับข้อเท็จจริงที่ว่าการดำเนินการบวกแบบโมดูโลและ XOR ไม่มีการสับเปลี่ยนไม่สามารถระบุได้จากระยะไกลว่ากุญแจอ่อนหรือไม่ การยืนยันสามารถทำได้หลังจากสร้างคีย์แล้วเท่านั้นความแรงของการเข้ารหัสสามารถปรับได้โดยการเปลี่ยนจำนวนรอบการเข้ารหัส (มากกว่าอาร์เรย์ P) และจำนวน S-box ที่ใช้ เมื่อเปลี่ยน S-box ที่ได้รับชัยชนะ โอกาสที่ปุ่มอ่อนจะปรากฏขึ้นจะเพิ่มขึ้น และหน่วยความจำที่ถูกชนะจะเปลี่ยนไปด้วยการปรับปักเป้าให้เป็นสถาปัตยกรรม 64 บิต คุณสามารถเพิ่มขนาดและขนาดของ S-box (และหน่วยความจำสำหรับอาร์เรย์ P และ S) และยังทำให้ F(x) ง่ายขึ้น และสำหรับอัลกอริธึมด้วย ฟังก์ชัน F(x) ดังกล่าวเป็นไปไม่ได้ที่จะกำหนดการโจมตี 16 การแก้ไข F(x): บล็อก 64 บิตถูกส่งไปยังอินพุต ซึ่งแบ่งออกเป็นบล็อก 8 บิตทั้งหมด (X1-X8) ผลลัพธ์จะคำนวณโดยใช้สูตรโดยที่

ณ วันนี้ (ใบไม้ร่วงปี 2551) ยังไม่มีการโจมตีใดที่จะเสร็จสิ้นภายในเวลาอันสมควร

ซาคิสต์

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

การใช้งานโปรแกรม

สิ่งสำคัญคือต้องอยู่ภายใต้คอมไพเลอร์ที่ได้รับชัยชนะ

การใช้โค้ดแอสเซมเบลอร์สามารถปรับปรุงความเร็วการเข้ารหัสได้

  • ความแรงของการเข้ารหัสได้รับผลกระทบจากการทำงานของ mov, add, xor และเวลาดำเนินการจะเพิ่มขึ้นเมื่อมีการอัพเกรดหน่วยความจำ (สำหรับโปรเซสเซอร์ Pentium series ประมาณ 5 เท่า)
  • ปักเป้าแสดงผลลัพธ์เพิ่มเติมเมื่อคุณใช้แคชเพื่อบันทึกการเชื่อมต่อทั้งหมด

ประเภทนี้เหนือกว่าอัลกอริธึม DES และ IDEA

กรอบงาน IDEA ใช้การดำเนินการคูณเบื้องหลังโมดูล

ความเร็วของ Twofish สามารถใกล้เคียงกับความเร็วของปักเป้าด้วยขนาดของบล็อกที่ใหญ่กว่าที่ถูกเข้ารหัส

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

เมื่ออ่าน GOST สิ่งสำคัญคือลำดับการทดสอบอาร์เรย์ 8 ไบต์ทั้งหมดจะต้องมีศูนย์ไบต์ที่ส่วนท้ายของอาร์เรย์ และส่วนใหญ่จะอยู่ที่จุดเริ่มต้น (เมื่อคุณอ่านบทความเกี่ยวกับ "Stribog" และ "Konik" อย่างถี่ถ้วน) แล้วนี่คือลักษณะเฉพาะของมาตรฐานการเข้ารหัสลับของเรา คุณทราบความผิด)

ทฤษฎีนิดหน่อย

ในอัลกอริธึม บล็อกที่ถูกเข้ารหัส (ฉันเดาว่ามันคือ 64 บิต) จะถูกแบ่งออกเป็นสองส่วนที่เท่ากัน (32 บิต) - ด้านขวาและซ้าย


จากนั้นการวนซ้ำสามสิบสองครั้งจะเสร็จสมบูรณ์ด้วยชุดของคีย์การวนซ้ำที่ได้มาจากคีย์การเข้ารหัสเอาต์พุต 256 บิต



ภายใต้ชั่วโมงแห่งการวนซ้ำของสกิน (ยังมีอีกสามสิบคนที่อยู่เบื้องหลังผู้กระทำผิด) จากครึ่งทางขวาและซ้ายของบล็อกที่ถูกเข้ารหัส การเปลี่ยนแปลงหนึ่งครั้งจะดำเนินการตามขอบ Feistel

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



หลังจากการกลับรายการ ตัวเลขจะถูกลบแบบวนไปทางซ้ายสิบเอ็ดหลัก


ผลคือแย่งบอลครึ่งซ้ายของบล็อก

หมายเลข 32 บิตที่ออกมาจะถูกเขียนไปที่ครึ่งขวาของบล็อก และหมายเลขเก่าแทนที่จะเป็นครึ่งขวาจะถูกโอนไปที่ครึ่งซ้ายของบล็อก

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

คีย์วนซ้ำมาจากคีย์เอาต์พุต 256 บิต

คีย์เอาต์พุตจะถูกแบ่งระหว่างคีย์ 32 บิตทั้งหมด จากนั้นจะถูกกำหนดตามลำดับต่อไปนี้: สามครั้งจากคีย์แรกถึงคีย์ที่แปด และอีกครั้งจากคีย์ที่แปดไปยังคีย์แรก

สำหรับการถอดรหัส จะใช้ลำดับการวนซ้ำเดียวกันกับการเข้ารหัส แต่ลำดับการส่งผ่านคีย์จะกลับกัน

โมฆะแบบคงที่ GOST_Magma_Add(const uint8_t *a, const uint8_t *b, uint8_t *c) ( int i; for (i = 0; i< BLOCK_SIZE; i++) c[i] = a[i]^b[i]; }

การเพิ่มเวกเตอร์คู่สองตัวด้านหลังโมดูล 32

ฟังก์ชันนี้คล้ายกับฟังก์ชันที่เรียกว่า "พับอยู่ในวงแหวนด้านหลังโมดูล 2 ระยะ n" ด้วยอัลกอริทึม "Stribog" ยกเว้นว่า n ในเวอร์ชันของเราจะเป็น 32 และไม่ใช่ 512 ดังในมาตรฐาน "Stribog"

เวกเตอร์เอาต์พุต 4 ไบต์สองตัวจะแสดงเป็นตัวเลข 32 บิตสองตัว จากนั้นจะถูกบวกเข้าไป และตัวใหม่จะถูกโยนออกไป:

โมฆะคงที่ GOST_Magma_Add_32(const uint8_t *a, const uint8_t *b, uint8_t *c) ( int i; unsigned int interior = 0; for (i = 3; i >= 0; i--) ( ภายใน = a[i] + b[i] + (ภายใน >> 8); c[i] = ภายใน & 0xff;

การเปลี่ยนแปลงทางชีวภาพแบบไม่เชิงเส้น (การประมวลผล T ใหม่)

นอกเหนือจากอัลกอริธึม "Stribog" และ "Konik" (ก่อนคำพูดซึ่งการแปลงเรียกว่าความละเอียด S) ตารางการเรียงสับเปลี่ยนที่นี่ยังแตกต่างออกไป:

ถ่าน Pi ที่ไม่ได้ลงนามคงที่ = ((1,7,14,13,0,5,8,3,4,15,10,6,9,12,11,2), (8,14,2,5,6 ,9,1,12,15,4,11,0,13,10,3,7), (5,13,15,6,9,2,12,10,11,7,8,1,4 ) ,3,14,0), (7,15,5,10,8,1,6,13,0,9,3,14,11,4,2,12), (12,8,2, 1) ,13,4,15,6,7,0,10,5,3,14,9,11), (11,3,5,8,2,15,10,13,14,1,7 ,4 ,12,9,6,0), (6,8,2,3,9,10,5,12,1,14,4,7,11,13,0,15), (12,4 ,6) ,2,10,5,11,9,14,8,13,7,0,3,15,1) );

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

รหัสสำหรับฟังก์ชันการแปลง T นั้นเป็นดังนี้:< 4; i++) { // Извлекаем первую 4-битную часть байта first_part_byte = (in_data[i] & 0xf0) >โมฆะแบบคงที่ GOST_Magma_T(const uint8_t *in_data, uint8_t *out_data) ( uint8_t first_part_byte, sec_part_byte; int i; for (i = 0; i<< 4) | sec_part_byte; } }

> 4;

// มอบส่วน 4 บิตของไบต์ให้เพื่อน sec_part_byte=(in_data[i]&0x0f);

// แปลงการแทนที่เป็นตารางค้นหา first_part_byte = Pi;