ลงชื่อครั้งเดียวคืออะไร ? SSO ทำงานอย่างไร?

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

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

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

SSO ทำงานอย่างไร?

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

โทเค็น SSO คืออะไร?

จำเป็นต้องมีโทเค็นเพื่อให้ SSO ทำงานได้ โทเค็น SSO ได้รับการเข้ารหัสและมีข้อมูลเกี่ยวกับผู้ใช้ เช่น ที่อยู่อีเมล ซึ่งย้ายจากระบบหนึ่งไปยังอีกระบบหนึ่งในระหว่างกระบวนการ SSO โทเค็นเหล่านี้ต้องได้รับการตรวจสอบด้วยลายเซ็นดิจิทัล เพื่อให้ฝ่ายที่ได้รับสามารถยืนยันว่ามาจากแหล่งที่ได้รับอนุญาต ข้อมูลรับรองที่จำเป็นสำหรับลายเซ็นดิจิทัลจะถูกรวบรวมระหว่างการกำหนดค่าครั้งแรก การอนุญาตแบบเปิด ( OAuth ) ภาษามาร์กอัปเพื่อยืนยันความปลอดภัย ( SAML ) และมาตรฐานข้อมูลประจำตัวที่คล้ายกันจะอนุญาตให้โทเค็นที่เข้ารหัสย้ายจากเซิร์ฟเวอร์ไปยังแอปได้อย่างปลอดภัย

SSO ใช้บ่อยแค่ไหน? 

บริษัทต่างๆ ใช้ SSO ด้วยเหตุผลหลายประการ รวมถึงการควบคุมดูแลการใช้งาน SaaS และเพิ่มความคล่องตัวในการออกจากงานของพนักงาน อาจมีประโยชน์อย่างมากในการเพิ่มประสิทธิภาพการทำงานสูงสุด เนื่องจากป้องกันไม่ให้ผู้คนลงชื่อเข้าและออกจากอุปกรณ์ แอป หรือระบบที่บริษัทอนุมัติแต่ละรายการที่พวกเขาใช้ ทุกครั้งที่ใช้งาน SSO ยังช่วยให้ธุรกิจปฏิบัติตามกฎระเบียบของอุตสาหกรรมและรักษาความปลอดภัยที่เพียงพอ 

การลงชื่อเพียงครั้งเดียวสำหรับ SaaS

เนื่องจาก SSO สามารถเป็นประโยชน์สำหรับกิจกรรมทางธุรกิจมากมาย บริษัทต่างๆ มักจะพิจารณารวมการลงชื่อเข้าใช้เพียงครั้งเดียวสำหรับแอปพลิเคชัน SaaS SSO ช่วยรักษาความปลอดภัยของ SaaS ได้ดียิ่งขึ้น เนื่องจากอาจทำให้ผู้ใช้จำนวนมากขึ้นปฏิบัติตามนโยบายรหัสผ่าน และทำให้การกู้คืนรหัสผ่านมีประสิทธิภาพมากขึ้น นอกจากนี้ยังแนะนำบริษัทในการปฏิบัติตามข้อกำหนดการควบคุมการเข้าถึงที่ระบุไว้ในมาตรฐานสากล เช่น SOC2 หรือ ISO27001

การลงชื่อเพียงครั้งเดียวปลอดภัยหรือไม่ 

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

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

ทำความเข้าใจข้อจำกัดของ SSO 

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

ตัวอย่างเช่น ลองพิจารณาว่าพนักงานใช้แอปที่ไม่อยู่ภายใต้ SSO เพื่อจุดประสงค์ในการทำงานแล้วออกไปหรือไม่ แผนกไอทีอาจไม่ทราบข้อมูลประจำตัวของบัญชี และด้วยเหตุนี้จึงไม่แน่ใจว่าข้อมูลชนิดใดที่เก็บอยู่ในนั้น SaaS ประเภทนี้อาจเป็นของบุคคลที่สาม เช่น บริษัทคู่ค้าที่ร่วมมือกับธุรกิจของคุณและใช้แอปที่ SSO ของคุณไม่รองรับ นอกจากนี้ยังอาจเกิดจากซอฟต์แวร์ที่พนักงานแต่ละคนใช้ (โดยไม่ปรึกษาทีมไอทีก่อน) เพื่อเพิ่มประสิทธิภาพการทำงาน ปรากฏการณ์นี้เรียกว่าShadow  SaaS

SSO มีค่าใช้จ่ายเท่าไร? 

ข้อเสียเปรียบอีกประการหนึ่งของ SSO คือค่าใช้จ่ายโดยรวมอาจทำให้ SaaS ทั้งหมดไม่มีประสิทธิภาพ บริษัทต่างๆ จะต้องไม่เพียงแค่คำนึงถึงค่าธรรมเนียมผู้ให้บริการ SSO ล่วงหน้าเท่านั้น แต่ยังต้องคำนึงถึงค่าใช้จ่ายในการขอใบอนุญาตที่เปิดใช้งาน SSO จากผู้ให้บริการ SaaS ด้วย พวกเขายังต้องพิจารณาถึงค่าใช้จ่ายอย่างต่อเนื่องในการบังคับใช้ SSO ตลอดจนลักษณะที่พัฒนาอย่างต่อเนื่องของแอป SaaS และงานที่น่าเบื่อในการจัดการรหัสผ่านที่อ่อนแอหรือซ้ำซ้อน 

บางบริษัทอาจพบว่าบุคลากรลังเลที่จะปฏิบัติตามหลักเกณฑ์ด้านความปลอดภัยสำหรับค่าใช้จ่าย SSO ทั้งหมด โดยทั่วไปแล้ว การปฏิบัติตามข้อกำหนดจะต่ำ — โดยทั่วไปจะอยู่ที่ประมาณ 20% ท้ายที่สุด ค่าใช้จ่ายของ SSO ประกอบกับความสามารถในการป้องกัน SaaS ส่วนใหญ่ที่องค์กรใช้ บ่งชี้ว่าวิธีการดังกล่าวมีข้อจำกัดอย่างมากสำหรับการรักษาความปลอดภัย 

จับ SSCP สำหรับการมองเห็น SaaS ความเสี่ยง และการควบคุมการเข้าถึง

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

ที่ Grip นวัตกรรมของเราได้นำเราไปสู่การพัฒนาแพลตฟอร์มที่แตกต่างโดยพื้นฐานสำหรับการรักษาความปลอดภัย SaaS ซึ่งคำนึงถึงหลุมพรางของ SSO นั่นคือSaaS  Security Control Plane (SSCP)

ทัศนวิสัย

ด้วยการปรับใช้ 15 นาที Grip SSCP ค้นพบการใช้ SaaS การใช้ในทางที่ผิด และการใช้ในทางที่ผิดทั่วทั้งเลเยอร์ SaaS ขององค์กร — บริการและแอป SaaS ที่นำโดยธุรกิจและไอที — เปิดเผยประวัติการใช้งาน วิธีการตรวจสอบสิทธิ์ ข้อมูลประจำตัวที่ไม่รัดกุม รหัสผ่านที่ซ้ำกัน และการหลอกลวง หรือละทิ้งบริการ SaaS

เสี่ยง

Grip จัดลำดับความสำคัญของการเปิดเผย SaaS และความเสี่ยง SaaS ที่สะสมจากการโต้ตอบระหว่างผู้ใช้ครั้งแรกกับ SaaS จนถึงปัจจุบัน ลดการใช้ประโยชน์จาก SaaS แบบกระจายด้วยการจัดทำดัชนีความเสี่ยงของ SaaS ตามการเข้าถึงและผลกระทบต่อการดำเนินงานและการควบคุมการทำงานของ SaaS ต่อธุรกิจ ไอที และการรักษาความปลอดภัย Grip SSCP เปิดเผยความเสี่ยงที่สะสมผ่านการสร้างกราฟในอดีตเพื่อระบุการเข้าถึงที่ห้อยต่องแต่ง บัญชีผีดิบ และการควบคุมการเข้าถึงที่ขาดหายไป ทำการตรวจสอบการเข้าถึงของผู้ใช้โดยอัตโนมัติและใช้ประโยชน์จากเวิร์กโฟลว์การบังคับใช้เหตุผลและเหตุผลในคลิกเดียวเพื่อแก้ไขการเข้าถึงที่อนุญาตมากเกินไปและช่องว่าง SSO

การควบคุมการเข้าถึง

ด้วย Grip ทีมรักษาความปลอดภัยสามารถบรรลุผลลัพธ์ SaaS ที่ปลอดภัยโดยไม่ต้องเป็นเจ้าของบริการ SaaS โดยตรง และบังคับใช้ (ไม่เพียงแค่เปิดใช้) การควบคุมการเข้าถึงทั่วทั้งเลเยอร์ SaaS ขององค์กร รวมถึงเวิร์กโฟลว์อัตโนมัติและการผสานรวมแบบเปิดกับจุดควบคุมที่มีอยู่ (เช่น SSO)

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

Grip SSCP ช่วยให้องค์กรต่างๆ สามารถปกป้องความเป็นจริงบนคลาวด์ของตนได้อย่างต่อเนื่อง ในขณะเดียวกันก็หลีกเลี่ยงความซับซ้อนของวิธีการตรวจสอบความถูกต้องหลายวิธีและค่าใช้จ่ายของ SSO แบบดั้งเดิม — ลดภาษี SSOและขยายการเข้าถึงที่ปลอดภัยทั่วทั้งชั้น SaaS ขององค์กรทั้งหมด

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

ใช้การลงชื่อครั้งเดียว (SSO) เพื่อควบคุมผู้ที่สามารถเข้าถึงบล็อกได้

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

คุณสามารถใช้ SSO เพื่อควบคุมผู้ที่สามารถเข้าถึงบล็อกภายในของคุณบน BlogIn โดยใช้ Identity Provider (IdP) ที่รองรับโปรโตคอล SAML 2.0 เช่น Okta, Microsoft Azure Active Directory, OneLogin, Googleนี่คือคู่มือ SSO ทั่วไป สำหรับการตั้งค่า SSO กับผู้ให้บริการเฉพาะที่ได้รับความนิยม (Google และ Microsoft AD) โปรดตรวจสอบ: 

วิธีตั้งค่าการลงชื่อเพียงครั้งเดียว (SSO) สำหรับ G Suite (Google)  หรือ 

วิธีตั้งค่าการลงชื่อเพียงครั้งเดียว (SSO) สำหรับ Microsoft Azure Active ไดเร็กทอรี .

กำหนดค่าการลงชื่อเพียงครั้งเดียว

หากต้องการกำหนดค่าการลงชื่อเพียงครั้งเดียว ให้ไปที่แท็บUser Authentication ในหน้า การตั้งค่าของบัญชี BlogIn ของคุณ โปรดทราบว่าคุณต้องเป็น ผู้ดูแลระบบจึงจะสามารถเข้าถึงหน้านี้ได้

เลื่อนไปที่ด้านล่างของหน้าไปที่ส่วนการลงชื่อเพียงครั้งเดียว และคลิกปุ่มกำหนดค่า SSO

กำหนดค่า BlogIn ให้ทำงานร่วมกับผู้ให้บริการข้อมูลประจำตัวของคุณ

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

เลือกชื่อที่กำหนดเองสำหรับวิธีการเข้าสู่ระบบนี้ ซึ่งจะแสดงบนหน้าจอเข้าสู่ระบบ เลือกวิธีการกำหนดค่า (แนะนำให้ใช้ URL ข้อมูลเมตาหรือไฟล์ข้อมูลเมตา)

หากคุณเลือกวิธีการกำหนดค่าด้วยตนเอง ให้เติมข้อมูล Identity Provider SSO URL (Login URL)และ  Identity Provider Issuer (entity ID)แล้วอัปโหลดใบรับรอง ที่ คุณได้รับจาก Identity Provider

ตั้งค่าบทบาทของผู้ใช้เริ่มต้น (ระดับการเข้าถึง) สำหรับผู้ใช้ใหม่ที่เข้าร่วม BlogIn ผ่าน SSO

คลิกปุ่ม  บันทึกการเปลี่ยนแปลง

กำหนดค่า Identity Provider ให้ทำงานร่วมกับ BlogIn

ในการกำหนดค่า SSO ให้เสร็จสมบูรณ์ คุณต้องกำหนดค่าผู้ให้บริการข้อมูลประจำตัวให้ทำงานร่วมกับ BlogIn ใช้ข้อมูลการกำหนดค่าที่ด้านล่างของหน้าจอการกำหนดค่า SSO

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

กำหนดค่าการจัดสรรผู้ใช้ผ่าน SCIM (ไม่บังคับ)

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

หาก Identity Provider ของคุณรองรับ User Provisioning ผ่านโปรโตคอล SCIM ให้เปลี่ยนไปที่แท็บ User Provisioning และใช้ข้อมูลการกำหนดค่าเพื่อกำหนดค่า User Provisioning บน Identity Provider ของคุณ

คลิกบันทึกการเปลี่ยนแปลงเพื่อยืนยันการเปลี่ยนแปลงใดๆ ที่คุณทำในหน้านี้

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

การเข้ารหัสความปลอดภัย ที่สมจริงเกี่ยวกับพื้นฐานของการเข้ารหัส

การเข้ารหัสความปลอดภัย การปฏิเสธความ รับผิด : บทความเหล่านี้มีวัตถุประสงค์เพื่อการศึกษาเท่านั้น วิธีการที่อธิบายในที่นี้มีไว้เพื่อแสดงแนวคิดพื้นฐาน ของการเข้ารหัสเท่านั้น และอาจเหมาะสมหรือไม่เหมาะกับการใช้งานในโลกแห่งความเป็นจริง สำหรับการใช้งานที่จริงจัง เช่น การทำธุรกรรมทางการเงิน ฉันแนะนำให้จ้างผู้เชี่ยวชาญด้านความปลอดภัยและจ้างทนายความที่เกี่ยวข้องด้วย ใช้ข้อมูลและรหัสนี้ด้วยความเสี่ยงของคุณเอง ฉันไม่ขอรับผิดชอบ!

หากคุณต้องการข้อมูลเชิงลึกเกี่ยวกับการเข้ารหัสมากกว่าที่บทความแนะนำเหล่านี้มีให้ เราขอแนะนำหนังสือที่ชื่อว่าApplied Cryptographyโดย Bruce Schneier หนังสือเล่มนั้นเกือบจะไม่ได้รับการตีพิมพ์เพราะ NSA ไม่ต้องการให้ข้อมูลนี้ออกสู่สาธารณะ ใช่สำหรับการแก้ไขครั้งที่ 1!

ความปลอดภัยที่สมจริง

“ทุกคนมีแผนจนกว่าจะโดนต่อยปาก” — ไมค์ ไทสัน

การเข้ารหัสนั้นยอดเยี่ยมมากและอย่างที่เพื่อนของฉันพูดในวันนี้ (BOOOOOORIIIIIIIS คุณยายของคุณกำลังโทรหาคุณ!) มีความบริสุทธิ์ทางคณิตศาสตร์บางอย่างที่น่าสนใจจริงๆ

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

วิธีที่นิยมและประสบความสำเร็จในการโจมตีระบบรักษาความปลอดภัยคือสิ่งที่เรียกว่าSocial Engineeringซึ่งคุณมักจะเห็นในภาพยนตร์เช่น “ภารกิจเป็นไปไม่ได้” และ “รองเท้าผ้าใบ”

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

นอกเหนือจากวิศวกรรมสังคมแล้ว ยังมีความปลอดภัยทางกายภาพที่ต้องระวังอีกด้วย ฉันเข้าร่วมDEF CONในเวกัสเป็นเวลาสองสามปีกับเพื่อนที่ดีของฉันLagGodและได้เรียนรู้บางสิ่งที่น่าสนใจจริงๆ DEF CON ค่อนข้างแน่นในช่วงไม่กี่ปีที่ผ่านมา แต่ฉันขอแนะนำให้ไปหากคุณสนใจเรื่องความปลอดภัย คนที่มีความสามารถจริงๆ จำนวนมากอยู่ทั้งสองด้านของรั้ว (ผู้โจมตีหรือที่รู้จักในชื่อหมวกสีดำและผู้ปกป้องหรือที่เรียกว่าหมวกสีขาว) และแม้กระทั่งผู้เลี้ยงและนักเทคโนโลยีบางคนที่ถูกโยนเข้ามา ต่อไปนี้เป็นบทเรียนด้านความปลอดภัยที่น่าจดจำ 2 บทเรียนที่ฉันได้เรียนรู้จากการประชุมที่นำความปลอดภัยมาสู่มุมมอง สำหรับฉัน.

แฮ็คเข้าสู่เครือข่าย Wifi ด้วยวิธีง่ายๆ

หมายเหตุ: วิธีนี้ใช้ไม่ได้ตามที่โฆษณาอีกต่อไป ต้องขอบคุณความก้าวหน้าของเทคโนโลยีความปลอดภัย wifi แต่หลักการยังคงน่าสนใจและอาจใช้ได้ผลในสถานการณ์อื่นๆ ที่คุณอาจพบว่าตัวเองเผชิญ นอกจากนี้ เป็นการดีที่จะทราบจุดอ่อนของระบบทั้งในอดีตและปัจจุบันเพื่อป้องกันได้ดียิ่งขึ้น ระบบอื่นๆ มิฉะนั้นอาชญากรเท่านั้นที่มีปืนและเราทุกคนก็เมา

ตกลง สมมติว่าคุณต้องการแฮ็กเข้าสู่เครือข่ายของบริษัท และสมมติว่าพวกเขามีเราเตอร์ไร้สาย ซึ่งเมื่อคุณพยายามเข้าถึงครั้งแรก คุณจะเห็นหน้าจอเข้าสู่ระบบของเว็บเบราว์เซอร์เพื่อพิมพ์ชื่อผู้ใช้และรหัสผ่านของคุณ

วิธีการทำงานของเครือข่าย wifi คือหากคุณพยายามเชื่อมต่อกับเครือข่าย wifi ระบบจะเลือกเราเตอร์ที่มีสัญญาณแรงที่สุดซึ่งเผยแพร่รหัสเครือข่ายที่คุณต้องการเชื่อมต่อด้วย

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

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

หลังจากที่คุณได้รวบรวมข้อมูลการเข้าสู่ระบบบางส่วนแล้ว คุณปิดเครือข่ายของคุณแล้วเข้าสู่ระบบของพวกเขา ขอบคุณสำหรับการเข้าสู่ระบบ d00ds!

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

เอาชนะไบโอเมตริกซ์

นี่เป็นข้อมูลที่ค่อนข้างล้าสมัยอีกครั้ง แต่ก็ยังค่อนข้างน่าสนใจและอาจมีประโยชน์สำหรับสถานการณ์อื่นๆ

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

พวกเขาแก้ไขปัญหานั้นด้วยการตรวจจับความร้อน ฟังการเต้นของหัวใจ และอาจใช้วิธีลับๆ หรือเผยแพร่อื่นๆ อีกมากมาย แต่มันก็ใช้ได้ผลค่อนข้างสม่ำเสมอ!

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

หมายเหตุสุดท้ายเกี่ยวกับความปลอดภัย

ต่อไปนี้เป็นคำพูดสุดท้ายเกี่ยวกับความปลอดภัย

  •  ไม่มีความปลอดภัยที่สมบูรณ์แบบ มีเพียงความปลอดภัยที่ดีพอเท่านั้น วิธีเดียวที่จะได้รับความปลอดภัยที่สมบูรณ์แบบคือการล็อคคอมพิวเตอร์ของคุณในตู้เซฟและวางลงในร่องลึกบาดาลมาเรียนา (แม้ว่าฉันจะได้ยินว่าคุณต้องระวัง James Cameron ในทุกวันนี้)
  • การรักษาความปลอดภัยที่ดีพอมักจะหมายถึงการทำให้แน่ใจว่าคุณไม่ได้เป็นคนง่ายๆ หากคุณถูกโจมตีได้ยากกว่าคนรอบข้าง คุณก็ปลอดภัยกว่าพวกเขา ถ้าคุณและคนอื่นกำลังวิ่งหนีสิงโต คุณไม่จำเป็นต้องวิ่งเร็วกว่าสิงโต คุณแค่ต้องวิ่งหนีสิงโตตัวนั้น!
  • หากการรักษาความปลอดภัยของคุณขึ้นอยู่กับความจริงที่ว่าอัลกอริทึมของคุณเป็นความลับ นั่นเรียกว่า “การรักษาความปลอดภัยผ่านความสับสน” และเป็นการรักษาความปลอดภัยที่อ่อนแอจริงๆ คุณควรถือว่าผู้โจมตีของคุณรู้รายละเอียดทุกอย่างเพื่อความปลอดภัยที่ดียิ่งขึ้น นอกจากนี้ อัลกอริทึมลับจะไม่ได้รับการตรวจสอบโดยเพื่อน ดังนั้นเทคนิคที่อ่อนแอจะไม่ถูกกำจัดออกไป อย่าลืมว่าผู้คนยังไม่ได้แคร็กข้อความ RC5 72 บิต ข้อความเดียวที่มีคีย์ขนาด 9 ไบต์ ซึ่งเผยแพร่ในช่วงกลางทศวรรษที่ 90 ถูกโจมตีโดยเครือข่ายคอมพิวเตอร์แบบกระจาย และยังคงไม่ถูกแคร็กแม้ว่าอัลกอริทึมจะเปิดเผยต่อสาธารณะก็ตาม นั่นคือความปลอดภัยที่ดีตรงนั้น

ผมไปพูดที่ DEF CON หรือ Toorcon ที่ซานดิเอโก (ขออภัย จำไม่ได้ว่าอันไหน) ซึ่งผู้เขียน Bruce Schneier (ซึ่งถูกกล่าวถึงในข้อจำกัดความรับผิดชอบ / ส่วนหัวของบทความเหล่านี้) บรรยายหลังจากที่เขาเพิ่งเผยแพร่ จองเป็นภาคต่อของ Applied Cryptography เขาพูดบางอย่างเช่น “โยนหนังสือเล่มอื่นทิ้งไป… ความปลอดภัยทางกายภาพเป็นสิ่งเดียวที่คุณต้องกังวลจริงๆ”

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

การทำให้ การค้นหาแบบไบนารี เป็นข้อมูลทั่วไปในมิติที่สูงขึ้น

การค้นหาแบบไบนารี สวัสดีทุกคน ตอนนี้ฉันกำลังพักร้อนอยู่ที่อารูบา ดำน้ำดูปะการัง ออกไปเที่ยวกับครอบครัว และทำงานบางอย่างเกี่ยวกับ kindle scribe ที่ฉันได้รับในวันคริสต์มาส อาลักษณ์เป็นสิ่งทดแทนกระดาษที่ยอดเยี่ยม และฉันก็กำลังขุดมันอยู่ ฉันใช้มันบ่อยในขณะที่ทำงานผ่านสิ่งต่างๆ ในโพสต์นี้ แต่ฉันยังใช้มันกับผู้พัฒนาเกม C++ โดยไม่มีหนังสือกราฟิกที่ฉันกำลังทำอยู่ ฉันจะต้องหาวิธีส่งออกหน้าเพื่อสร้างไดอะแกรมที่ดีขึ้นสำหรับบล็อกโพสต์ในอนาคต (;

อย่างไรก็ตาม ฉันเลิกเล่นทวิตเตอร์แล้วย้ายไปที่มาสโตดอน ฉันอยู่ที่นี่แล้วถ้าคุณอยากติดตามฉัน: https://mastodon.gamedev.place/@demofox

ฉันเพิ่งเล่น battleship กับลูกชายของฉันและคิดว่าการเลือกตำแหน่งที่จะยิงนั้นเหมือนกับการสุ่มตัวอย่างฟังก์ชัน 2d แบบไบนารี่ที่ให้ผลตอบแทน 1 สำหรับการตีหรือ 0 สำหรับการพลาด มีความละเอียดอ่อนมากกว่านี้เนื่องจากมีเรือที่มีความยาวต่างกัน ดังนั้นคุณสามารถรับข้อมูลเพิ่มเติมได้เมื่อเวลาผ่านไป แต่มันทำให้ฉันนึกถึงรูปแบบการยิงในอุดมคติเมื่อค้นหาเรือข้าศึก

ฉันได้ข้อมูลบางอย่างจากมาสโตดอนและพบลิงค์ที่น่าสนใจ

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

โค้ดนี้เขียนขึ้นเพื่อให้อ่านง่าย/เข้าใจได้ ดังนั้นจึงใช้การเรียกซ้ำ ซึ่งในความเป็นจริงแล้วคุณจะไม่ทำเช่นนั้น โดยเฉพาะอย่างยิ่งสำหรับกรณีการค้นหาแบบไบนารี 1 มิติ

การเรียงลำดับ

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

ใช้แนวคิดจาก heps คุณสามารถจัดเรียงบางส่วนเพื่อให้ค่าทางด้านขวาและด้านล่างมากกว่าหรือเท่ากับค่าปัจจุบันในทุกตำแหน่ง และนั่นคือสิ่งที่ฉันจะทำ

ฉันลองพยายามคิดค้นอัลกอริทึมการเรียงลำดับสำหรับสิ่งนี้อยู่พักหนึ่งก่อนที่จะพบว่าคุณสามารถจัดเรียงแถวแกน X ทั้งหมด จากนั้นตามด้วยคอลัมน์แกน Y ทั้งหมด และคุณก็จะได้สิ่งนี้ สำหรับ 3D ขึ้นไป คุณยังคงจัดเรียงแกนใหม่แต่ละแกนต่อไป

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

ลองใช้มุมมองต้นไม้ / กราฟ

ครั้งแรกที่ฉันพยายามมองว่านี่เป็นต้นไม้ที่มีค่ามีลูกสองคน ค่าทางด้านขวาและค่าด้านล่าง เมื่อทำเช่นนี้ ฉันสังเกตเห็นว่าต้นไม้ไม่ใช่ต้นไม้ แต่เป็นกราฟ เนื่องจากค่าเกือบทั้งหมดมีพาเรนต์สองตัว สิ่งที่ดีคือเนื่องจากอาร์เรย์ N-dimensional สามารถจัดเก็บไว้ในหน่วยความจำเป็นอาร์เรย์ 1 มิติ (เนื่องจากนั่นคือวิธีการทำงานของหน่วยความจำ) กราฟนี้สามารถใช้ประโยชน์จากสิ่งนั้นและไม่ต้องการตัวชี้ใด ๆ โดยการเชื่อมโยงระหว่างพ่อแม่และลูกเป็นนัย ( บวก 1 ถึง x เพื่อให้ได้ลูก 1 คน บวก 1 เข้ากับ y เพื่อให้ได้ลูกอีกคน)

ยังไม่แน่ใจว่ามีประโยชน์หรือไม่ แต่จนถึงขณะนี้มีแนวโน้มที่ดี!

ในการค้นหาโครงสร้างนี้ ฉันลองค้นหาเชิงลึกก่อนและพบว่าต้องใช้เวลาอ่านหลายครั้งระหว่างการค้นหา เกือบแย่พอๆ กับการค้นหาเชิงเส้น ส่วนใหญ่เป็นเพราะเด็กมีพ่อแม่หลายคน คุณจะค้นหากราฟย่อยเดียวกันซ้ำซ้อน ฉันวางแผนที่จะเพิ่ม “ดัชนีเวอร์ชันการค้นหา” ในแต่ละค่า เขียนดัชนีนี้เมื่อทดสอบโหนดกราฟ และอ่าน/เรียกซ้ำผ่านโหนดกราฟที่มีหมายเลขเวอร์ชันน้อยกว่าเท่านั้น ซึ่งหมายเลขเวอร์ชันนี้จะเพิ่มขึ้นทุกครั้งที่ทำการค้นหา

ก่อนที่ฉันจะทำตามนั้น ฉันมีความคิดที่ฟังดูดีมากกว่า

กลับไปที่มุมมอง Flat Array

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

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

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

เปรียบเทียบองค์ประกอบตรงกลางของอาร์เรย์ 2 มิติกับค่าการค้นหา หากมีค่าเท่ากัน แสดงว่าการค้นหาของคุณเสร็จสิ้น

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

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

เมื่อคุณลบควอแดรนท์ออก คุณจะเหลือสี่เหลี่ยมสองอันสำหรับวนซ้ำ

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

อาร์เรย์ 3 มิติและสูงกว่า

แนวคิดเหล่านี้สรุปเป็น 3 มิติโดยที่คุณทำการเรียงลำดับสามแกนของอาร์เรย์ 3 มิติเพื่อเริ่มต้น

เช่นเดียวกับกรณีอาร์เรย์ 2 มิติ จากนั้นคุณทดสอบองค์ประกอบตรงกลางกับคีย์ค้นหาและทำเสร็จแล้ว ลบออกเทนต์ค่าต่ำที่สัมผัส (0,0,0) หรือลบออกเทนต์ค่าสูงที่สัมผัส (ความกว้าง ความสูง , ความลึก).

ในกรณี 2 มิติ การลบควอแดรนท์ทำให้เรามีสี่เหลี่ยมสองรูปเพื่อเรียกซ้ำ ในกรณี 3 มิติ การถอดแปดเหลี่ยมออกทำให้เรามีคิวบอยด์สามลูกเพื่อเรียกซ้ำ การค้นหาแบบไบนารี

สิ่งนี้ทำให้ภาพรวมเป็น 4D ขึ้นไปได้ดี โดยทำตามรูปแบบของมิติที่ต่ำกว่า

คุณสมบัติด้านประสิทธิภาพ

ใน 1D อัลกอริทึมนี้เป็นการค้นหาแบบไบนารีที่คุณทิ้งครึ่งซ้ายหรือขวาของอาร์เรย์หลังจากเปรียบเทียบองค์ประกอบตรงกลางกับคีย์ค้นหา แต่ละขั้นตอนจะลบ 1/2 ของค่าออกจากการพิจารณา

ในแบบ 2 มิติ อัลกอริทึมนี้จะโยนควอแดรนท์ที่มีค่าต่ำกว่าหรือควอแดรนท์ที่มีค่าสูงกว่าออกไปในแต่ละขั้นตอน แต่ละขั้นตอนจะลบ 1/4 ของค่าออกจากการพิจารณา

3D พ่นค่าแปดหรือ 1/8 ของค่าจากการพิจารณาในแต่ละขั้นตอน

เรากำลังเผชิญกับคำสาปแห่งมิติและได้รับผลตอบแทนที่ลดลง ทิ้ง 1 / (2^D) ในแต่ละขั้นตอนสำหรับการค้นหาไบนารีมิติ

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

มีวิธีใดที่จะช่วยได้บ้าง? เราสามารถจัดเรียงอาร์เรย์เพื่อเพิ่มค่าในแต่ละขั้นตอนได้หรือไม่ ไม่แน่ใจ.

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

one-time pad ความ ลับที่สมบูรณ์แบบ หากใช้งานอย่างเหมาะสม

one-time pad (OTP) เป็นอัลกอริธึมการเข้ารหัสที่ให้ ความ ลับที่สมบูรณ์แบบ หากใช้งานอย่างเหมาะสม แป้น ซึ่งโดยพื้นฐานแล้วเป็นคีย์ที่มีความยาวเท่ากับข้อความ จะต้องใช้เพียงครั้งเดียว (ดังนั้นชื่อนี้) จึงเก็บเป็นความลับ และส่วนที่ยากจะสร้างขึ้นโดยใช้วิธีการสุ่มอย่างแท้จริง มันทำงานโดยXORการรวมแพดและข้อความเข้าด้วยกัน ซึ่งทำให้ไซเฟอร์เท็กซ์แยกไม่ออกจากข้อมูลที่สร้างขึ้นแบบสุ่ม

ฉันต้องการให้ชัดเจนกับข้อกำหนดที่นี่ แผ่นแบบครั้งเดียวไม่ใช่ “สุ่ม” ตัวเลขไม่สุ่ม ไม่ใช่แค่จำนวนทรัพย์สินเท่านั้นที่สามารถมีได้ เพื่อความอวดรู้ สิ่งที่สุ่มคือวิธีการสร้างตัวเลข คิดว่า “ตัวสร้างตัวเลขสุ่ม” ไม่ใช่ “ตัวสร้างตัวเลขสุ่ม”

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

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

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

สมมติว่าคุณมีไฟล์ข้อมูลแบบสุ่มrandom.dataเป็นแพดแบบใช้ครั้งเดียวเพื่อใช้ในการเข้ารหัสซอร์สโค้ดสำหรับโปรแกรมนี้

otp สุ่มข้อมูล < otp.c > otp.c.otp

หากคุณแชร์แพดrandom.dataกับเพื่อนซึ่งคุณกำลังพยายามสื่อสารด้วย เธอสามารถถอดรหัสมันได้ด้วยคำสั่งที่คล้ายกัน

otp สุ่มข้อมูล < otp.c.otp > otp.c

random.dataมีขนาดเพียง 207kB ดังนั้นข้อความของคุณจะยาวกว่านั้นไม่ได้ นอกจากนี้ เมื่อส่ง 207kB แล้ว คุณต้องเปลี่ยนแพดใหม่ก่อนที่จะส่งไซเฟอร์เท็กซ์เพิ่มเติมได้ หากคุณนำแพดของคุณกลับมาใช้ใหม่ แสดงว่าคุณประนีประนอมต่อความปลอดภัยของไซเฟอร์เท็กซ์ใหม่และไซเฟอร์เท็กซ์เก่า one-time pad

เหตุผลที่ฉันระบุตัวเลือกที่สองคือ: คุณสามารถใช้งาน/dev/randomได้โดยตรงโดยไม่ทำแผ่นรองหาย (สมมติว่าคุณมีระบบปฏิบัติการที่มีเครื่องหมาย/dev/randomเหมือนกับระบบปฏิบัติการทั่วไปทุกประการ)

#เข้ารหัส
otp /dev/random Random.pad < otp.c > otp.c.otp

#ถอดรหัส
otp random.pad < otp.c.opt > otp.c

นี่เป็นเพียงเชิงวิชาการเท่านั้น เนื่องจากโดยทั่วไปแล้วแพดแบบครั้งเดียวจะถูกแลกเปลี่ยนก่อนที่จะมีข้อความธรรมดา มิเช่นนั้นคุณก็สามารถแลกเปลี่ยนข้อความธรรมดาได้ตามปกติเมื่อคุณแลกเปลี่ยนแพดแบบครั้งเดียวตามปกติ! นอกจากนี้/dev/randomยังช้า มันสร้างตัวเลขโดยใช้เสียงรบกวนจากสิ่งแวดล้อมซึ่งมีให้ที่หยดเท่านั้น หากคุณต้องการเข้ารหัสข้อความขนาด 1MB อาจใช้เวลาหลายวัน ด้วยข้อความสั้นๆ คุณสามารถเร่งความเร็วได้ด้วยการเลื่อนเมาส์ไปรอบๆ หรือบดแป้นพิมพ์ (สิ่งนี้อาจสนุก)

เพิ่มเติมเกี่ยวกับแผ่นแบบใช้ครั้งเดียวต่อไป โดยเฉพาะอย่างยิ่งฉันจะนำเสนอเคล็ดลับสองประการ: วิธีที่ได้ผลและวิธีที่ไม่ได้ผล

ใน โพสต์ ที่ แล้ว ฉันได้พูดถึงแผ่นแบบใช้ครั้งเดียว ข้อมูลสำหรับโพสต์นี้มาจาก Applied Cryptography ของ Bruce Schneier (ส่วนที่ 10.8)

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

เรามีแผ่นแบบใช้ครั้งเดียวKข้อความธรรมดา ข้อความธรรมดาPจำลอง (ภาพอนาจารหรือจดหมายรัก) Dคีย์จำลองK'และข้อความCเข้ารหัส ด้านล่าง ฉันแสดง XOR ด้วย^.

ในการเข้ารหัสข้อความธรรมดาของเรา ซึ่งเป็นอัลกอริทึมแพดแบบใช้ครั้งเดียวตามปกติ

P ^ K = C

Bob และ Alice ใช้ K ร่วมกัน ดังนั้นการถอดรหัสจึงทำงานเหมือน

C^K = พี

อย่างไรก็ตาม ตำรวจลับมาพร้อมกับ ตะปูควง ของพวกเขา และเรียกร้องให้อลิซและบ็อบมอบแผ่นรองแบบใช้ครั้งเดียวให้พวกKเขา พวกเขาจะจัดหาให้K'แทน K ถูกกำหนดอย่างไร? แบบนี้,

K' = C^D

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

C^K' = C^C^D = D

“เห็นไหม เราแค่เก็บเรื่องรัก ๆ ใคร่ ๆ ไว้เป็นความลับจากคู่ครองของเรา!”

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

การ เข้ารหัสแผ่นครั้งเดียวด้วย QR และ JAVASCRIPT พื้นฐาน

เข้ารหัสแผ่นครั้งเดียวด้วย QR การเข้ารหัสแพดแบบครั้งเดียวให้ความปลอดภัยที่ไม่แตกหัก* หากคุณสามารถรับประกันการสร้างตัวเลขสุ่มอย่างแท้จริง และความปลอดภัยของแพดที่สร้างขึ้น การใช้งานจากมุมมองของคนธรรมดาที่เข้ารหัสเป็นวิธีที่สนุกในการเรียนรู้เพิ่มเติมเกี่ยวกับมัน และสามารถเพิ่มชั้นความปลอดภัยพิเศษให้กับการสื่อสารที่ละเอียดอ่อนที่สุดของคุณ

รูปแบบของแพดแบบใช้ครั้งเดียวที่ใช้โดยสำนักงานความมั่นคงแห่งชาติของสหรัฐอเมริกา ชื่อรหัสว่า DIANA ตารางด้านขวาเป็นตัวช่วยในการแปลงระหว่าง txt ธรรมดาและข้อความเข้ารหัสโดยใช้อักขระด้านซ้ายเป็นคีย์ วงกลมสีดำเป็นสิ่งประดิษฐ์ของการคัดลอก เนื่องจากมีการเจาะรูในต้นฉบับ
(ภาพและข้อความคัดลอกคำต่อคำจาก: https://en.wikipedia.org/wiki/File:NSA_DIANA_one_time_pad.tiff)

ฉันเริ่มต้นด้วยการพยายามเลียนแบบตัวอย่าง NSA ด้านบน ในที่สุดฉันก็ลงเอยด้วยคีย์อักขระ 169 ตัว (แมปเป็นตาราง 13 x 13) ในขณะที่ฉันพยายามเข้ารหัสอักขระเพิ่มเติมในโค้ด QR มันยังใช้งานได้ดีสำหรับข้อความสั้น ๆ และเพื่อพิสูจน์แนวคิด มันมากเกินพอ

รหัส R นั้นสั้นและเรียบง่ายและแสดงไว้ด้านล่าง มันเริ่มต้นด้วยการสร้างตัวเลขสุ่ม 13 x 13 ตั้งแต่ 0 ถึง 25 เพื่อแมปเป็น A ถึง Z นอกจากนี้ยังใช้ไลบรารี qrcode เพื่อสร้างรหัส QR ของคีย์เข้ารหัส จากนั้นจะส่งออกเป็นไฟล์ PDF เพื่อพิมพ์และแจกจ่ายให้กับทั้งผู้ส่งและผู้รับ

#==========================
# Simple one-time-pad generator
# with QR code generation for encryption key
#
# J. van der Linde (jvdl@jvdl.me)
#
# Updated 30 April 2021
#==========================

rm(list = ls())

library(dplyr)
library(qrcode)
library(grid)
library(gridExtra)

#==========================

setwd("~/R/Projects/onetimepad/")

#export pdf to file
pdf("~/R/Projects/onetimepad/otp.pdf")

#initialise with number of rows, cols, and sheets of paper to generate
dim_row <- 13
dim_col <- 13
total_chars <- dim_row * dim_col
total_sheets <- 3

for (i in 1:total_sheets) {
    print(paste("Producing sheet no.", i, "of", total_sheets))
    otp_num <- floor(runif(total_chars, min = 0, max = 26)) #generate from 0 to 25
    otp_char <- replace(otp_num, TRUE, LETTERS[unlist(otp_num + 1)]) #rewrite numbers 0-25 to A-Z
    otp_string <- paste(unlist(otp_char), collapse = '') #create a continuous string for the QR code
    
    otp_num_matrix <- matrix(otp_num, nrow = dim_row, ncol = dim_col, byrow = TRUE) #create a numeric matrix
    otp_char_matrix <- matrix(otp_char, nrow = dim_row, ncol = dim_col, byrow = TRUE) #create a char matrix
    
    otp_char_df <- data.frame(otp_char_matrix) #create dataframe of char matrix
    rownames(otp_char_df) <- seq(dim_row) #set rownames as 1 ... x
    colnames(otp_char_df) <- seq(dim_col) #set colnames as 1 ... y
    
    #output the table of chars to the PDF
    grid.table(otp_char_df)
    grid.text(paste("SHEET", i, "OF", total_sheets), x = unit(0.5, "npc"), y = unit(0.95, "npc"))
    
    #print QR code of OTP to PDF
    qrcode_gen(otp_string)
    
    if (i != total_sheets){
        grid.newpage()
    }
}

#close pdf device
dev.off()

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

PDF ของคีย์เข้ารหัส OTP ที่สร้างขึ้นและรหัส QR ที่เกี่ยวข้อง

เมื่อจำเป็นต้องส่งข้อความที่มีความลับเป็นพิเศษ ตัวละครเอกของเราซึ่งเราจะเรียกพวกเขาว่าอลิซและบ็อบตามประเพณี จะต้องตกลงเกี่ยวกับรหัสที่จะใช้ พวกเขาอาจเตรียมการล่วงหน้าโดยเริ่มที่แผ่นแรกและดำเนินการต่อไปตามลำดับ หรือพวกเขาสามารถตัดสินใจเลือกแผ่นงานได้เอง ตัวอย่างเช่น อลิซสามารถส่งข้อความหาบ๊อบโดยพูดว่า “ใช้ชีต 3 วันนี้” เข้ารหัสแผ่นครั้งเดียวด้วย QR

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

อลิซ: สวัสดี FreedomProtestor123 วันนี้ใช้แผ่น3 ข้อความจะตามมาในไม่ช้า

บ๊อบ: สวัสดี DemocracyGirl42 จะทำ

เหตุการณ์ปัจจุบัน…

โดยใช้การบวกแบบโมดูลาร์ (รหัสของเราสำหรับ AZ เท่านั้น ซึ่งมีหมายเลขตั้งแต่ 0 ถึง 25) Alice คำนวณข้อความที่เข้ารหัส เธอเพิ่มตัวอักษรตัวแรกของข้อความต่อตัวอักษรตัวแรกของคีย์ โมดูโล 26 เธอทำซ้ำสำหรับตัวอักษรตัวที่ 2 ของข้อความและตัวอักษรตัวที่สองของคีย์ ไปเรื่อยๆ จากนั้นเธอก็จับคู่ตัวเลขผลลัพธ์ของการบวกแบบโมดูลาร์กลับไปเป็นตัวอักษร

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

ฉันเชื่อมโยงที่นี่กับตัวอย่าง HTML/JS พื้นฐานซึ่งสามารถโฮสต์ออนไลน์หรือเก็บไว้ออฟไลน์เพื่อใช้งานได้ โค้ดนี้จงใจให้เรียบง่ายและสะอาดตา (ไม่มี CSS) เพื่อให้ตรวจสอบแหล่งที่มาได้ง่ายและตัดสินใจได้ว่าจะเชื่อถือหรือไม่ คุณสามารถดูการใช้งานโฮสต์ของฉันได้ที่http://jvdl.me/otp.html ; เนื่องจากเป็นหน้า HTML ที่เรียบง่าย โทรศัพท์หรือคอมพิวเตอร์ทุกเครื่องสามารถแสดงผลได้

การใช้ปุ่มบนแผ่นงาน 3

(DKPKAREZTPABSCHIBLTHZZLNARDGRXVGIBGQDPWLESQWKKAVQDKSPHZNMRDBBNJPTWDANLOARNELLMGODWAMQPYACBABRVTYAPDQHVQESOWQJESMMMDLZULCVGTCYXVZYIJBKOODXCXYSAUCAFGNUUPIBXPHLSXPBBLTQTLUO)

และข้อความของเธอ “เจอกันตอนสิบเอ็ดโมงที่จัตุรัสกลางเมือง” ในที่สุดอลิซก็ลงเอยด้วยข้อความเข้ารหัสต่อไปนี้:

อลิซ: VOT IOL ES XAEWWP HU JY MOD SZJN JTAROZ

บ๊อบ: เข้าใจแล้ว ขอบคุณ

ลึกลับและคลุมเครือ บางทีก็โรแมนติก…

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

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

อลิซและบ็อบเป็นคนฉลาดทั้งคู่ พวกเขาคำนึงถึงสิ่งต่อไปนี้ทั้งหมด:

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

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

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

One-time pad (OTP) หรือ Vernam-cipher หรือ perfect cipher ดียังไง

One-time pad (OTP) หรือที่เรียกว่า Vernam-cipher หรือ perfect cipher เป็นอัลกอริทึมการเข้ารหัสที่รวมข้อความธรรมดาเข้ากับคีย์สุ่ม เป็นการเข้ารหัสที่ไม่สามารถแตกได้ทางคณิตศาสตร์เพียงอย่างเดียวที่มีอยู่แผ่นรองแบบใช้ครั้งเดียวถูกใช้โดยทีมปฏิบัติการพิเศษและกลุ่มต่อต้านในช่วงสงครามโลกครั้งที่ 2 ซึ่งเป็นที่นิยมในหมู่หน่วยข่าวกรองและสายลับของพวกเขาตลอดช่วงสงครามเย็นและหลังจากนั้น และปกป้องการรับส่งข้อความทางการทูตและการทหารทั่วโลกเป็นเวลาหลายสิบปีแพดแบบครั้งเดียวได้รับชื่อเสียงว่าเป็นระบบเข้ารหัสที่เรียบง่ายแต่แข็งแกร่งพร้อมการรักษาความปลอดภัยที่สมบูรณ์ ซึ่งอัลกอริทึมการเข้ารหัส

ลับที่ทันสมัยในปัจจุบันไม่มีใครเทียบได้ ไม่ว่าความก้าวหน้าทางเทคโนโลยีจะเกิดขึ้นในอนาคต การเข้ารหัสแพดแบบใช้ครั้งเดียวคือและจะยังคงเป็นระบบเดียวที่ไม่มีการแตกหักอย่างแท้จริงที่ให้ความลับของข้อความในระยะยาวอย่างแท้จริงเราสามารถพูดคุยเกี่ยวกับแป้นแบบครั้งเดียวได้ก็ต่อเมื่อปฏิบัติตามกฎที่สำคัญบางประการ หากใช้กฎเหล่านี้อย่างถูกต้อง แผ่นรองแบบใช้ครั้งเดียวสามารถพิสูจน์ได้ว่าไม่แตกหัก (ดู “ทฤษฎีการสื่อสารของระบบความลับ” ของ Claude Shannon) แม้แต่พลังการคำนวณที่ไม่สิ้นสุดและเวลาที่ไม่สิ้นสุดก็ไม่อาจทำลายการเข้ารหัสแพดแบบครั้งเดียวได้ เพียงเพราะมันเป็นไปไม่ได้ในทาง

คณิตศาสตร์ อย่างไรก็ตาม หากเพียงกฎข้อใดข้อหนึ่งถูกเพิกเฉย การเข้ารหัสก็จะไม่สามารถแตกได้อีกต่อไปคีย์มีความยาวอย่างน้อยเท่ากับข้อความหรือข้อมูลที่ต้องเข้ารหัสคีย์เป็นแบบสุ่มอย่างแท้จริง (ไม่ได้สร้างโดยฟังก์ชันคอมพิวเตอร์ทั่วไปหรืออื่นๆ)คีย์และข้อความธรรมดาคำนวณแบบโมดูโล 10 (หลัก), โมดูโล 26 (ตัวอักษร) หรือโมดูโล 2 (ไบนารี)แต่ละคีย์จะใช้เพียงครั้งเดียว และทั้งผู้ส่งและผู้รับต้องทำลายคีย์ของตนหลังการใช้ควรมีสำเนาของคีย์เพียงสองชุด: ชุดหนึ่งสำหรับผู้ส่งและอีกชุดหนึ่งสำหรับผู้รับ (มีข้อยกเว้นบางประการสำหรับผู้รับหลายคน) แผ่นกระดาษขนาดจิ๋วที่ใช้ครั้งเดียว


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


ต้นกำเนิดของ One-time pad

เรื่องราวของแพดแบบใช้ครั้งเดียวเริ่มต้นในปี 1882 เมื่อนายธนาคารชาวแคลิฟอร์เนีย แฟรงค์ มิลเลอร์ รวบรวม “รหัสโทรเลขเพื่อประกันความเป็นส่วนตัวและความลับในการส่งโทรเลข” สมุดรหัสดังกล่าวถูกใช้โดยทั่วไป เพื่อลดต้นทุนโทรเลขโดยการบีบอัดคำและวลีเป็นรหัสตัวเลขหรือรหัสตัวอักษรสั้นๆ สมุดรหัสเหล่านี้ให้การรักษาความปลอดภัยเพียงเล็กน้อยหรือไม่มีเลยอย่างไรก็ตาม สมุดรหัสของ Miller ยังให้คำแนะนำสำหรับการเข้ารหัสขั้นสูง (เลเยอร์การเข้ารหัสที่สองเหนือรหัส) โดยวิธีการที่ไม่เหมือนใคร: เขาเพิ่มสิ่งที่เรียกว่า shift-numbers (คีย์) ลงในรหัสธรรมดา (คำที่แปลงเป็นตัวเลข) และกำหนด shift-number

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

และใช้เพียงครั้งเดียว ระบบเลขคณิตแบบโมดูลาร์จะให้การเข้ารหัสที่ไม่แตกหักมิลเลอร์ได้คิดค้นแผ่นรองแบบใช้ครั้งเดียวเป็นครั้งแรก น่าเสียดายที่การเข้ารหัสที่สมบูรณ์แบบของมิลเลอร์ไม่เป็นที่รู้จักโดยทั่วไป หลงทางในประวัติศาสตร์ของการเข้ารหัสและไม่เคยได้รับเครดิตที่สมควรได้รับ ทันทีที่มันถูกประดิษฐ์ขึ้น ในไม่ช้ามันก็หายไปอย่างลืมเลือน นักวิจัย Steven Bellovinถูกค้นพบอีกครั้งในปี 2011 ในเอกสารสำคัญจากนั้นในปี 1917 Gilbert Vernam วิศวกรวิจัยของ AT&T ได้พัฒนาระบบเพื่อเข้ารหัสการสื่อสารแบบเทเลไทป์ แม้ว่าสิ่งประดิษฐ์ของ Vernam ในทางคณิตศาสตร์จะคล้ายกับแนวคิดของ Miller แต่เขาก็คิดค้นระบบเครื่องกลไฟฟ้าโดยใช้เลขคณิตแบบโมดูลาร์แบบไบนารี ซึ่งแตกต่างอย่างสิ้นเชิงกับอัลกอริทึมปากกาและกระดาษของ Miller ดังนั้นจึงไม่น่าเป็นไปได้ที่เวอร์นัมจะยืมแนวคิดของมิลเลอร์Vernam ผสมเทป

กระดาษเจาะรหัส Baudot ห้าบิตซึ่งมีข้อความกับเทปกระดาษเจาะที่สองซึ่งเป็นคีย์ที่มีค่าห้าบิตแบบสุ่ม ในการผสมเทปเจาะรู การเพิ่มโมดูโล 2 (ภายหลังรู้จักกันในชื่อ Boolean XOR หรือ Exclusive OR) ได้ดำเนินการด้วยรีเลย์ และคีย์เทปจะทำงานพร้อมกันบนเครื่องส่งและรับ TELEX เป็นระบบเข้ารหัสออนไลน์ทันทีแบบอัตโนมัติระบบแรก

แผ่นงานครั้งเดียวของสำนักงานการต่างประเทศเยอรมัน


เอื้อเฟื้อรูปภาพNational Cryptologic Museumแผ่นรองแบบใช้ครั้งเดียวขนาดเล็กและตารางการแปลง
จากอดีตหน่วยข่าวกรองเยอรมันตะวันออก
HVA – Hauptverwaltung Aufklärung
© SAS Chiffrierdienstหนังสือแพดแบบใช้ครั้งเดียวและเครื่องอ่าน microdot
ซ่อนอยู่ในรถบรรทุกของเล่นและถูกใช้โดย
ตัวแทนผิดกฎหมายที่ดำเนินการในแคนาดา
© CSIS ของแคนาดาส่วนหนึ่งของ CIA one-time pad ที่
Aleksandr Ogorodnik (TRIGON) ใช้
ที่มา: KGB Archives

อย่างไรก็ตาม นักวิทยาการเข้ารหัสลับชาวเยอรมันสามคนได้ตระหนักถึงข้อดีของการเข้ารหัสแบบครั้งเดียวทันที ในช่วงต้นทศวรรษที่ 1920 นักวิทยาการเข้ารหัสลับชาวเยอรมัน Werner Kunze, Rudolf Schauffler และ Erich Langlotz ได้เข้ารหัสข้อมูลทางการทูตของฝรั่งเศสด้วยการเข้ารหัส รหัสตัวเลขดินสอและกระดาษเหล่านี้ใช้สมุดรหัสเพื่อแปลงคำและวลีเป็นตัวเลข ฝรั่งเศสเพิ่มคีย์ตัวเลขซ้ำสั้นๆ (โดยโมดูโล 10) เพื่อเข้ารหัสค่าสมุดรหัสนักวิทยาการเข้ารหัสลับชาวเยอรมันไม่มีปัญหาในการทำลายคีย์ลัดเหล่านี้ แต่ตระหนักว่าการเพิ่มรหัสหลักแบบสุ่มที่ไม่ซ้ำกันให้กับแต่ละกลุ่มรหัสจะทำให้ข้อความไม่สามารถแยกได้ พวกเขาคิดค้นระบบโดยใช้แผ่นกระดาษที่มีตัวเลขสุ่ม แต่ละหลักจะใช้เพียงครั้งเดียว และแผ่นกระดาษ

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

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

แบบใช้ครั้งเดียวที่มีความปลอดภัยอย่างสมบูรณ์แบบเป็นรหัสสตรีมแบบสุ่มหลอกที่อ่อนแอในปี 2559 สตีเวน เบลโลวิน นักวิจัยค้นพบเอกสารของสำนักงานความมั่นคงกองทัพสหรัฐฯ ในปี 2490 เกี่ยวกับการเข้า

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

แต่เป็นตัวอย่างทางตำราที่มีนัยสำคัญทางประวัติศาสตร์ของการใช้งานที่ไม่ถูกต้อง ในกรณีของการใช้คีย์ที่ไม่ได้สุ่มอย่างแท้จริงมีการคิดค้นรูปแบบต่างๆ มากมายในระบบดินสอและกระดาษนี้ Name one-time pad (OTP) หมายถึง กระดาษโน้ตขนาดเล็กที่มีตัวเลขหรือตัวอักษรแบบสุ่ม โดยปกติจะพิมพ์เป็นกลุ่มละห้าตัว สำหรับแต่ละข้อความใหม่ แผ่นงานใหม่จะถูกฉีกออก มักจะพิมพ์เป็นรูปเล่มเล็ก ๆ หรือบนไมโครฟิล์มเพื่อการสื่อสารแบบแอบแฝงIn 1943, one-time pads became the main cipher of the Special Operations Executive (SOE) to replace insecure poem based transposition ciphers and

book ciphers. The system was used extensively during and after the Second World War by many intelligence organizations, sabotage and espionage units.การเข้ารหัสที่ไม่สามารถทำลายได้จะปกป้องผู้ปฏิบัติงานและผู้ติดต่อจากการถอดรหัสการสื่อสารและการเปิดเผยตัวตนของพวกเขา ไม่

สามารถรับประกันระดับความปลอดภัยดังกล่าวกับระบบเข้ารหัสอื่นๆ ในระหว่างการดำเนินการที่ใช้เวลานาน เนื่องจากฝ่ายตรงข้ามอาจมีเวลาเพียงพอในการถอดรหัสข้อความได้สำเร็จโซเวียตพึ่งพา OTP และ OTT อย่างมากในระหว่างและหลังสงครามโลกครั้งที่สองสำหรับกองกำลังติดอาวุธและองค์กรข่าวกรองของพวกเขา ทำให้การสื่อสารที่สำคัญส่วนใหญ่ไม่สามารถเข้าถึงได้ ระบบหนึ่งที่โซเวียตใช้สำหรับจดหมายจากและถึงสถานทูตของตนคือการลบเฉพาะคำ ชื่อ หรือวลีที่ละเอียดอ่อน และแทนที่ด้วย “No 1”, “No 2”

เป็นต้น ถัดไป ข้อความที่ละเอียดอ่อนและการกำหนดหมายเลขที่สอดคล้องกันจะถูกเข้ารหัสด้วยแป้นแบบใช้ครั้งเดียว และข้อความเข้ารหัสนี้จะมาพร้อมกับตัวอักษรการเข้ารหัสเฉพาะส่วนที่ละเอียดอ่อนเหล่านี้สามารถลดจำนวนข้อความเข้ารหัส การทำงาน และเวลาในการประมวลผลจดหมายขนาดยาวได้อย่างมาก การเปลี่ยนแปลงครั้งใหญ่ของการสื่อสารของโซเวียตเป็นแพดแบบใช้ครั้งเดียวในปี 1948 ทำให้ความพยายาม SIGINT ของ NSA เป็นง่อยมานานหลายปี เหตุการณ์ที่ NSA เรียกว่าBlack Friday (บทที่ 3 หน้า 19 )ทางด้านขวา คุณจะพบแพดแบบใช้ครั้งเดียวรุ่นต่างๆ มากมาย ซองพลาสติกที่มีแผ่นรองแบบใช้ครั้ง

เดียวและตารางสำหรับแปลงข้อความเป็นตัวเลขนั้นถูกใช้โดย HVA หน่วยข่าวกรองต่างประเทศของเยอรมันตะวันออก หน่วยสืบราชการลับของแคนาดายึดหนังสือเล่มเล็กแบบใช้ครั้งเดียวขนาดเล็ก เครื่องอ่าน microdot และเลนส์พิเศษ ซึ่งซ่อนไว้อย่างชาญฉลาดในรถบรรทุกของเล่นที่ลูกชายคนเล็กของหน่วยข่าวกรองต่างชาตินำเข้าประเทศเพื่อดำเนินการจารกรรมในแคนาดา อุปกรณ์สอดแนมที่ซ่อนอยู่เพิ่มเติมได้ที่เว็บไซต์CSISภาพสุดท้ายเป็นส่วนหนึ่งของแผ่นจารึกที่ใช้ครั้งเดียว ซึ่งถูกใช้โดย Aleksandr Dmitrievich Ogorodnik (TRIGON) พนักงานกระทรวงต่างประเทศของสหภาพโซเวียตที่กระทำการจารกรรมให้กับ CIA (คลิกเพื่อดูภาพขยาย)

 ข้อมูลเพิ่มเติมเกี่ยวกับTRIGON ได้ที่ SIGINT Chatterและที่หน้าเว็บของAndrei Sinelnikov (แปล) การใช้แผ่นอิเล็กโทรดแบบใช้ครั้งเดียวในช่วงแรกๆ แทบไม่มีการกล่าวถึงในเอกสารอย่างเป็นทางการ (ด้วยเหตุผลด้านความปลอดภัยที่ชัดเจน) อย่างไรก็ตาม ฉันพบเอกสารจาก India Office Records ในหอสมุดแห่งชาติอังกฤษ พวกเขาแสดงให้เห็นว่า Bahrain Petroleum Company (BAPCO) ซึ่งเป็นบริษัทในเครือของ American Standard Oil of California ซึ่งดำเนินการในอ่าวเปอร์เซียได้รับอนุญาตในปี 1943 ให้ใช้แผ่นอิเล็กโทรดแบบใช้ครั้งเดียวเพื่อสื่อสารกับสำนักงานในนิวยอร์กได้อย่างไรแผ่นดังกล่าวได้รับการจัดสรรโดยกรมกองทัพเรือสหรัฐฯ และได้รับการตรวจสอบโดยเจ้าหน้าที่รักษาความปลอดภัยรหัสอังกฤษของ PAIFORCE (กองกำลังเปอร์เซียและอิรัก ขบวนทหารอังกฤษและเครือจักรภพใน

ตะวันออกกลางตั้งแต่ปี 2485 ถึง 2486)พวกเขาแสดงการใช้แผ่นจดหมายแบบใช้ครั้งเดียวอย่างเป็นทางการโดยผู้อยู่อาศัยทางการเมืองของ British Imperial Civil Administration, British Army, the Ministry of War Transport in London และ US Navy อย่างน้อยที่สุดในปี 1943 และที่น่าประหลาดใจคือมีการแชร์กัน กับบริษัทการค้า. ดูข้อมูลเพิ่มเติมได้ในบล็อกโพสต์ของฉันBAPCO ‘s Use of One-time Pads during WW2


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

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

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

การ ตรวจสอบความซ้ำซ้อนแบบวนซ้ำ (CRC) รหัสตรวจจับข้อผิดพลาด

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

รหัสทั้งหมดที่ใช้ในบทความนี้ (และอื่น ๆ ) สามารถพบได้ในGitHub ของฉัน หรือที่นี่

ซีอาร์ซีคืออะไร

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

CRC (มีโปรโตคอลขึ้นอยู่กับคำจำกัดความของ CRC มากมาย) ถูกกำหนดโดย:

  • พหุนามP (ซึ่งก็คือx8+x7+x6+x4+x2+ 1�8+�7+�6+�4+�2+1กรณีเป็น CRC-8-Bluetooth)
  • การดำเนินการก่อนและหลังการดำเนินการหารด้วยP

การคำนวณ CRC จะทำในพื้นที่พหุนาม ดังนั้นจึงถือว่าข้อมูลเป็นพหุนาม

ตัวอย่างเช่น,” ก” = 97 = 0 ข01100001 =x6+x5+ 1″ก”=97=0ข01100001=�6+�5+1.

เพื่อสรุปชุดของบิตb ( n ) b ( n − 1 ) . . . ข( 1 ) ข( 0 )ข(น)ข(น-1)…ข(1)ข(0)สามารถเทียบได้กับพหุนามข= ข( น)เอ็กซ์น+ ข( n − 1 )เอ็กซ์(n − 1 ) + _ . . + ข( 1 ) X+ ข( 0 )ข=ข(น)เอ็กซ์น+ข(น-1)เอ็กซ์(น-1)+…+ข(1)เอ็กซ์+ข(0)

และ CRC จะคำนวณเป็น:

  x = (op_start(B)) mod[P]
  CRC(B) = op_end(x)

ด้วยop_startและop_endสองการดำเนินการกับพหุนาม

การแสดงพหุนาม

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

สำหรับ CRC8 ที่ใช้พหุนามx8+x7+x6+x4+x2+ 1�8+�7+�6+�4+�2+1การแสดงที่แตกต่างกันมีดังนี้:

พิมพ์เทียบเท่ากับค่าเลขฐานสิบหก
ปกติx8+ (x7+x6+x4+x2+ 1 )�8+(�7+�6+�4+�2+1)0xD5
กลับด้าน1 + (x2+x4+x4+x6+x7+x8)1+(�2+�4+�4+�6+�7+�8)0xAB
ซึ่งกันและกัน( 1 +x2+x4+x4+x6+x7) +x8(1+�2+�4+�4+�6+�7)+�80x57
กลับกัน(x8+x7+x6+x4+x2) + 1(�8+�7+�6+�4+�2)+10xEA

รายชื่อพหุนามสำหรับ CRCs ต่างๆ สามารถพบได้ที่นี่ ตรวจสอบความซ้ำซ้อนแบบวนซ้ำ

การคำนวณ CRC

ในส่วนนี้ฉันนำเสนอวิธีคำนวณใน python CRC ด้วยพหุนามของความยาวคูณด้วย 8 รหัสได้รับแรงบันดาลใจจากที่นำเสนอในRosettaCode

class CRC:
    '''
    This CRC class works to generate crc of length multiple of 8.
    :param polynome int: polynome in reciprocal form
    :param init_xor int: first data xoring to apply on the data
    :param end_xor int: final data xoring to apply on the data
    '''
    def __init__(self, polynome, init_xor, end_xor):
        self.polynome = polynome
        self.crc_len = (len(hex(polynome)[2:])-1)//2
        self.init_xor = init_xor
        self.end_xor = end_xor
        self.crc_table = self.create_table()
        self.inv_crc_table = self.create_inv_table()

    def create_table(self):
        table = []
        for i in range(256): # for all byte value
            k = i
            for j in range(8): # compute modulus
                if k & 1:
                    k ^= self.polynome
                k >>= 1
            table.append(k)
        return table

    def crc(self, bytestring, crc_val=0):
        crc_val ^= self.init_xor
        for byte in bytestring:
            # Compute crc recursively
            crc_val = (crc_val >> 8) ^ self.crc_table[(crc_val & 0xff) ^ byte]
        return crc_val ^ self.end_xor

ในการคำนวณ CRC32 แบบคลาสสิก พารามิเตอร์จะเป็นดังนี้:

polynome =  0x1db710640
init_xor = int('FF'*4, 16)
end_xor = int('FF'*4, 16)

คุณสมบัติบางอย่างของ CRC

CRCs มีคุณสมบัติที่น่าสนใจซึ่งจะใช้ในภายหลัง อย่างไรก็ตาม การสาธิตคุณสมบัตินี้ปล่อยให้ผู้อ่านสนใจ

  • CRC(A ^ B ^ C) = CRC(A) ^ CRC(B) ^ CRC(C), for len(A) = len(B) = len(C)
  • สามารถคำนวณ CRC แบบเรียกซ้ำได้ (ดูรหัสในส่วนก่อนหน้า):
    • CRC(0) = c0
    • CRC(i+1) = (CRC(i) >> 8) ^ T[(CRC(i) & 0xFF) ^ M[i]]ด้วย T ตารางค่าคงที่ (ดูcreate_table)
  • การเกิดซ้ำของ CRC เพิ่มคุณสมบัติบางอย่าง:
    • CRC('', val) = val
    • CRC(M, val) = CRC(M[1:], CRC(M[0], val))
    • CRC(M) = CRC(M, 0)

การกลับ CRC

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

แนวทางกำลังด้อย

วิธีแรกคือการใช้กำลังดุร้าย สำหรับ CRC ที่มีความยาวlและข้อความM=M[0]M[1]…M[n-1]จำนวนnบิต จะพบข้อความอื่นที่มี CRC เดียวกันได้โดยการทดสอบชุดค่าที่เป็นไปได้ทั้งหมดสำหรับ M[nl ]..M[n-1] .

วิธีนี้ใช้ง่ายแต่ช้ามาก หากเวลาในการคำนวณเป็นที่ยอมรับสำหรับ CRC32 จะกลายเป็นเรื่องที่น่ารำคาญมากสำหรับ CRC64 หรือเมื่อคุณจำเป็นต้องคำนวณหลายรายการพร้อมกัน

วิธีการที่ไม่ไร้เดียงสา

เป็นไปได้ที่จะทำได้ดีกว่าวิธีการไร้เดียงสา ในการทำเช่นนั้น อัลกอริทึมการคำนวณ CRC จำเป็นต้องย้อนกลับ

เพื่อลดความซับซ้อน เนื่องจาก CRC ของ 32 บิตจะได้รับการพิจารณา แต่สามารถใช้วิธีการเดียวกันนี้กับความยาวเท่าใดก็ได้

ตามที่เห็นก่อนหน้านี้ CRC สามารถคำนวณซ้ำได้ด้วยเงื่อนไขนี้ * CRC(0) = c0 *CRC(i+1) = (CRC(i) >> 8) ^ T[(CRC(i) & 0xFF) ^ M[i]]

ในกรณีของการแทนสี่ไบต์:

องค์ประกอบบิตข0ข0ข1ข1ข2ข2ข3ข3
(CRC(i) >> 8) = Bข0ข0ข1ข1ข2ข2
T[(CRC(i) & 0xFF) ^ M[i]] = Tที0ที0ที1ที1ที2ที2ที3ที3
CRC(i+1) = กก0ก0ก1ก1ก2ก2ก3ก3
ซีอาร์ซี(i+1)ที0ที0ที1ที1^ข0ข0ที2x โออาร์ข1ที2�โอรข1ที3x โออาร์ข2ที3�โอรข2

สิ่งแรกที่ต้องตระหนักคือถ้าเรารู้ว่าCRC(i+1)เรารู้ 8 บิตทางด้านซ้ายของT[(CRC(i) & 0xFF) ^ M[i]].

ค่า T ทั้งหมดมีค่าเฉพาะสำหรับ 8 บิตทางด้านซ้าย ( T[i] >> (crc_len - 8หรือที0ที0บนโต๊ะ). T_invสามารถสร้างตารางย้อนกลับ ได้

มีคุณสมบัติดังต่อไปนี้ * T[T_inv[i]] = i *T_inv[T[i] >> (crc_len - 8)] = i

จากนั้นค่าของ CRC(i) ยกเว้น 8 บิตแรกทางขวา (ข0ข1ข2ข0ข1ข2) สามารถทราบได้โดย:

(CRC(i) >> 8) = CRC(i+1) ^ T[T_inv[CRC(i+1) >> (crc_len - 8)]]

การดำเนินการนี้สามารถทำได้CRC(i)ทั้งหมด

ตอนนี้ต้องหาค่า M

แต่เรายังรู้ค่ากลางอีกค่าหนึ่งด้วย (เช่น CRC(0) ซึ่งเป็น 0 หรือ -1 (0xFF..FF) หรืออาจเป็น CRC ของบิต N-4) จากนั้นเราก็สามารถคำนวณค่า M[i] ได้ เนื่องจากเราทราบ CRC และ T Recursively ที่สอดคล้องกัน เราจึงสามารถสร้างค่าข้อความใหม่ได้จากจุดนี้

สำหรับกรณีของ CRC32:

CRC(i+1) = T[(CRC(i) & 0xFF) ^ M[i]] ^
           (
            (T[(CRC(i-1) & 0xFF) ^ M[i-1]] ^
             (
              (T[(CRC(i-2) & 0xFF) ^ M[i-2]] ^
               (
                (T[(CRC(i-3) & 0xFF) ^ M[i-3]] ^
                 (
                  (T[(CRC(i-4) & 0xFF) ^ M[i-3]] ^
                  (CRC(i-4) >> 8)
                  ) >> 8
                 )
                ) >> 8
               )
              ) >> 8
             )
            ) >> 8
           )
         = T[(CRC(i) & 0xFF) ^ M[i]] ^
           (T[(CRC(i-1) & 0xFF) ^ M[i-1]] >> 8) ^
           (T[(CRC(i-2) & 0xFF) ^ M[i-2]] >> 16) ^
           (T[(CRC(i-3) & 0xFF) ^ M[i-3]] >> 24) ^
           (T[(CRC(i-4) & 0xFF) ^ M[i-3]] >> 32) ^
           (CRC(i-4) >> 40)
        = T[(CRC(i) & 0xFF) ^ M[i]] ^
           (T[(CRC(i-1) & 0xFF) ^ M[i-1]] >> 8) ^
           (T[(CRC(i-2) & 0xFF) ^ M[i-2]] >> 16) ^
           (T[(CRC(i-3) & 0xFF) ^ M[i-3]] >> 24) ^
           (T[(CRC(i-4) & 0xFF) ^ M[i-3]] >> 32)

และเรายังสามารถพิสูจน์ CRC ของความยาวได้อย่างง่ายดายn*8

CRC(i+1) = T[(CRC(i) & 0xFF) ^ M[i]] ^
           (T[(CRC(i-1) & 0xFF) ^ M[i-1]] >> 8) ^
           (T[(CRC(i-2) & 0xFF) ^ M[i-2]] >> 16) ^
           ...
           (T[(CRC(i-(n-1)) & 0xFF) ^ M[i-(n-1)]] >> (n*8))

ค่า CRCs ที่ขั้นตอนi+1ขึ้นอยู่กับค่า CRC เริ่มต้นที่ขั้นตอนi-(n-1) เท่านั้น (ซึ่งเรียกว่าเป็น crc ของส่วนของข้อความM[i-(n-1): i+1]ที่จะไม่ถูกแก้ไข)

ในการแก้ไขข้อความให้มี CRC เฉพาะ ฉันเขียนโค้ดต่อไปนี้:

    def create_inv_table(self):
        inv_table = [0] * 256
        l = self.crc_len*8 - 8
        for i, elem in enumerate(self.crc_table):
            val = elem >> l
            inv_table[val] = i
        return inv_table

    def crc_inv(self, data, crc_target):
        original_crc = self.crc(data, 0)
        prev_crc = crc_target ^ self.end_xor
        index_table = []
        crc_list = [prev_crc]
        new_data = []
        l = self.crc_len*8 - 8
        for i in range(self.crc_len):
            crc_head = prev_crc >> l
            index = self.inv_crc_table[crc_head]
            index_table = [index] + index_table
            prev_crc = (prev_crc ^ self.crc_table[index]) << 8
            crc_list = [prev_crc] + crc_list
        crc_list = [original_crc ^ self.init_xor] + crc_list
        for i in range(self.crc_len):
            new_data.append((crc_list[i] ^ index_table[i]) & 0xFF)
            crc_list[i+1] = (crc_list[i] >> 8) ^ (self.crc_table[index_table[i]])
        return data + bytes(new_data)

โดยใช้รหัส:

>>> import crc
>>> crc = crc.CRC(0x1db710640, int('FF'*4, 16), int('FF'*4, 16))
>>> crc.crc_inv(b'', 0xDEADBEEF)
b'\xc3\xd8$\x06'
>>>> hex(crc.crc(b'\xc3\xd8$\x06'))
'0xdeadbeef'

CRC และการเข้ารหัส

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

รหัสสตรีม

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

กุญแจแบบนั้น:Key = E(IV, K)|E(IV, K+1)|....|E(IV, K+N)|...

และ XOR คีย์นี้พร้อมข้อความ:C = E(M, K1|K2|...|KN) = E(M, K1)|E(C, K2)...|E(C, KN)

ซึ่งสามารถสังเกตได้ว่าC = E(M, K) = M ^ K

ไม่ควรใช้ CRC เพื่อความสมบูรณ์

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

จากตอนที่แล้วCRC(A ^ B ^ C) = CRC(A) ^ CRC(B) ^ CRC(C), for len(A) = len(B) = len(C) ดังนั้นสำหรับแผ่นครั้งเดียว :C = M ^ K with len(C) = len(M) = len(K)

โดยการคำนวณ CRC ของรหัสและใช้ความสัมพันธ์ก่อนหน้า: CRC(C) = CRC(M ^ K ^ 0) = CRC(M) ^ CRC(K) ^ CRC(0), for len(A) = len(B) = len(C)

เป้าหมาย:แก้ไข C ใน C2 เช่นนั้นCRC(C2 ^ K) = CRC(M2) = CRC(M)

C2ได้มาจากการดัดแปลงC xoring ด้วยK2

CRC(C2 ^ K) = CRC(C ^ K2 ^ K)
            = CRC(C) ^ CRC(K2) ^ CRC(K)

เป้าหมายคือการมี:

CRC(C2 ^ K) = CRC(M2) = CRC(M)

ดังนั้น

    CRC(M) = CRC(C) ^ CRC(K2) ^ CRC(K)
    CRC(K2) = CRC(M) ^ CRC(K) ^ CRC(C)
            = CRC(M) ^ CRC(K) ^ CRC(0) ^ CRC(0) ^ CRC(C)
            = CRC(M ^ K ^ 0) ^ CRC(0) ^ CRC(C)
            = CRC(C) ^ CRC(0) ^ CRC(C)
            = CRC(0)

หากต้องการแก้ไขรหัสโดยไม่ต้องแก้ไข CRC ของข้อความที่ชัดเจน สามารถสร้าง คีย์K2 ได้ และควรตรวจสอบ CRC(K2) = CRC(0)ซึ่งสามารถคำนวณได้ด้วยอัลกอริทึมที่อธิบายไว้ในส่วนก่อนหน้า

คุณสามารถตรวจสอบได้จากตัวอย่างนี้ (โดยเพิ่มรหัสก่อนหน้า):

cipher = lambda x,k:bytes([a^b for a,b in zip(x, k)])

crc = crc.CRC(0x1db710640, int('FF'*4, 16), int('FF'*4, 16))

message = b'CRC is so fun to break'
key     = b'Sha1 is better for crypto'
c = cipher(message, key)
#out: b'\x10:"\x12I\x1aSS\rE\x12\x01\x0bRT\tO\x10R\x06\x13\x12'
crc_m = crc.crc(message)
# '0x601784a9'
key_2 = b'\x42' * (len(message) - 4)
key_2 = crc.crc_inv(key_2, crc.crc(b'\x00'*len(message)))
# b'BBBBBBBBBBBBBBBBBB\xe9P\xc0x'
modified_c = cipher(c, key_2)
# b'Rx`P\x0bX\x11\x11O\x07PCI\x10\x16K\rR\xbbV\xd3j'
modified_m = cipher(modified_c, key)
# b'\x01\x10\x01b+1b1-b$7,b6-b \x9b5\xa1\x13'
crc.crc(modified_m)
# 0x601784a9 same as crc_m = crc.crc(message)
# We achieved our goal

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

บทสรุป

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

ขอบคุณที่อ่านบทความนี้ หวังว่าจะได้พบคุณเร็ว ๆ นี้

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

ตัวเข้ารหัสที่กำหนดเอง – แพดแบบใช้ครั้งเดียว (OTP)

ตัวเข้ารหัสที่กำหนดเอง – แผ่นเวลาเดียวลิงก์ถาวร รูทีนการเข้ารหัสที่ฉันเลือกสำหรับการมอบหมายนี้คือOne-time pad (OTP)ซึ่งจำเป็นต้องมีคีย์ ที่แบ่งปันล่วงหน้าเพื่อให้ทำงานได้ ความจำเป็นในการใช้คีย์ที่แบ่งปันล่วงหน้าเพื่อถอดรหัสเพย์โหลด เป็นหนึ่งในปัญหาที่เกิดขึ้นเมื่อพูดถึง OTP หากการแชร์คีย์ไม่เสร็จสิ้นอย่างปลอดภัย ก็ไม่มีประโยชน์ ที่จะใช้แพดแบบใช้ครั้งเดียวตั้งแต่แรก เนื่องจากบทความนี้จะไม่แตะหัวข้อของการแชร์คีย์เลยสักนิด ฉันจึงถือว่าใครก็ตาม ควรมีความคิดที่จะแชร์อย่างปลอดภัยนอกขอบเขตของบทความเล็กๆ นี้

แนวคิดง่ายๆ เบื้องหลังการใช้แผ่นแบบใช้ครั้งเดียวสามารถอธิบายได้ด้วยตัวอย่างเล็กๆ น้อยๆ ถ้าเรามีข้อความธรรมดาaและเราได้แบ่งปันรหัสลับล่วงหน้าอย่างปลอดภัยb แล้ว เพื่อให้ ได้ข้อความที่เข้ารหัส เราจะ xor aและในการถอดรหัสข้อความ เราจะใช้คีย์ที่แบ่งปันล่วงหน้าbอีกครั้งเพื่อ xor ด้วยข้อความที่เข้ารหัสแทน ด้วยวิธีนี้เราจะลงเอยด้วยข้อความต้นฉบับa . รูปแบบต่อไปนี้อธิบายถึงขั้นตอนเดียวกันทุกประการ:

การสร้างคีย์สุ่มลิงก์ถาวร

คุณจะสร้างคีย์ที่สุ่มได้อย่างไร นี่เป็นปัญหาอื่น นอกเหนือจากการแบ่งปันรหัส นี่คือช่วงเวลาที่ถ้าคุณเริ่มค้นหาในอินเทอร์เน็ต คุณจะสะดุดกับตัวสร้างตัวเลขสุ่มหลอก และตัวสร้างตัวเลขสุ่มจริง เนื่องจากฉันตัดสินใจแล้วว่าจะใช้ Python สำหรับงานชิ้นนี้ ฉันจึงตัดสินใจดูว่า ภาษานี้มีอะไรให้ฉันใช้นอกกรอบและลงเอยด้วยการใช้urandom()ฟังก์ชันจากosโมดูล ฉันเลือกตัวเลือกนี้ตามคำแนะนำของ Python ในการสร้างหน้าตัวเลขสุ่มหลอก1ซึ่งระบุ:

“คำเตือน ไม่ควรใช้ตัวสร้างสุ่มหลอกของโมดูลนี้เพื่อจุดประสงค์ด้านความปลอดภัย ใช้ os.urandom() หรือ SystemRandom หากคุณต้องการตัวสร้างตัวเลขสุ่มหลอกที่ปลอดภัยด้วยการเข้ารหัส”

อีกสิ่งหนึ่งสำหรับแพดแบบใช้ครั้งเดียวคือคีย์สามารถมีความยาวเท่ากับเพย์โหลดหรือนานกว่านั้น ฉันตัดสินใจที่จะให้มันยาวเท่ากันกับเพย์โหลดเอง

การเข้ารหัสลิงก์ถาวร

ในที่สุดขั้นตอนการเข้ารหัสก็จบลงแบบสั้นๆ และเรียบง่าย แต่เมื่อฉันตัดสินใจใช้ Python 3 แทน 2 (เป็นประสบการณ์ที่ดีในอนาคต) ฉันใช้เวลาสักครู่ เนื่องจาก os.urandom สร้างสตริงสุ่มตามความยาวที่ระบุและคีย์ [i] จะให้การแสดงทศนิยม ฉันสามารถใช้มันโดยตรงใน xor ในทางกลับกัน ข้อความธรรมดา[i] ยังคงต้องใช้ฟังก์ชัน ord() เพื่อส่งคืนจำนวนเต็มแทนที่จะเป็นถ่าน ASCII ผลลัพธ์ของการดำเนินการ xor ยังคงต้องการการจัดรูปแบบบางอย่าง เนื่องจากผลลัพธ์0bตามค่าเริ่มต้นจะแสดงbในสตริงที่เข้ารหัสสุดท้ายเท่านั้น การจัดรูปแบบที่นี่มีความสำคัญเนื่องจากฉันต้องการให้เพย์โหลดที่เข้ารหัสมีความยาวเท่ากันทุกประการกับเพย์โหลดดั้งเดิม ในกรณีนี้ 43 ไบต์

import os, codecs

def encrypt(plaintext, key):
	print ("[+] -------- Encryption --------")
	print ("[+] Key: "+str(codecs.encode(key, 'hex')))
	encrypted = ""

	for i in range(len(plaintext)):
		c = ord(plaintext[i]) ^ key[i]
		d = "{:02x}".format(c)
		#print ("i:"+str(i)+" P: "+str(plaintext[i])+" K: "+str(key[i])+" C:"+str(c)+" D:"+str(d))
		encrypted += d

	print ("[+] Encrypted string: "+encrypted)
	return encrypted

plaintext = """\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08
\x48\x89\xd9\x51\x48\x89\xe7\x52\x48\x83\xec\x08\x48\x89\x3c\x24\x48
\x89\xe6\x48\x31\xc0\xb0\x3b\x0f\x05"""
key = os.urandom(len(plaintext))
encrypted = encrypt(plaintext,key)

ผลลัพธ์สุดท้ายจะมีลักษณะดังนี้ (python3 ./program.py เข้ารหัสเพย์โหลด) ตัวเข้ารหัสที่กำหนดเอง

$ python3 encrypt.py
[+] -------- Encryption --------
[+] Key: b'81a6b9cc11b37a5ce9d32ed80bdd18393eb275088b5bff05befe12ccff9d58613b597a5e5d002401d0ee73'
[+] Encrypted string: c9976b84aa9c553e80bd01ab6395d9d236fafcd1da1376e2ecb69120f7d5d15d1f11f3b81531e4b1ebe176

ถอดรหัสลิงก์ถาวร

สำหรับการถอดรหัส ฉันต้องใช้รหัสของฉันเพื่อดำเนินการ xor เดิมอีกครั้ง แต่ต้องใช้เพย์โหลดที่เข้ารหัสด้วยคีย์ที่ใช้ร่วมกัน

import codecs

def decrypt(encrypted, key):
	print ("[+] -------- Decryption --------")
	decrypted = ""
	msg = codecs.decode(encrypted, 'hex')

	for i in range(len(msg)):
		c =  msg[i] ^ key[i]
		d = "{:02x}".format(c)
		decrypted += d

	print ("[+] Decrypted string (XX): \n"+decrypted)
	print("[+] Decrypted string (\\xXX):\n" + r"\x" + r"\x".join(decrypted[n : n+2] for n in range(0, len(decrypted), 2)))

encrypted = "ad15b360f30576bb4a0a75476da68ad1d287c22c078ad2b71929cb3de177e13fdea4a0ff4441e94195222e"
key = "e5246128482a59d923645a3405ee4b3adacf4bf556c25b504b6148d1e93f6803faec29190c7029f1ae2d2b"

decrypt(encrypted, codecs.decode(key, 'hex'))

ผลลัพธ์สุดท้ายจะมีลักษณะดังนี้ ดังนั้นเราจะลงเอยด้วยเพย์โหลดข้อความธรรมดาเริ่มต้นของเรา:

$ python3 decrypt.py
[+] -------- Decryption --------
[+] Decrypted string (XX):
4831d248bb2f2f62696e2f736848c1eb084889d9514889e7524883ec0848893c244889e64831c0b03b0f05
[+] Decrypted string (\xXX):
\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x48\x89\xd9\x51\x48
\x89\xe7\x52\x48\x83\xec\x08\x48\x89\x3c\x24\x48\x89\xe6\x48\x31\xc0\xb0\x3b\x0f\x05

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

One Time Pad การเข้ารหัสที่สมบูรณ์แบบ

การเข้ารหัสที่สมบูรณ์แบบ One time pad (OTP) เป็นการเข้ารหัสที่ง่ายมาก อัลกอริทึมมันเป็นแบบนี้ และเป็นการเข้ารหัสเดียวที่ได้รับการพิสูจน์แล้วว่าปลอดภัยอย่างสมบูรณ์แบบ

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

OTP เป็นการเข้ารหัสเดียวที่ได้รับการพิสูจน์แล้วว่าปลอดภัยอย่างสมบูรณ์แบบ หากใช้อย่างถูกต้อง การเข้ารหัสจะไม่เปิดเผยข้อมูลเพิ่มเติมใดๆ ที่เราไม่ทราบเกี่ยวกับข้อความธรรมดา สำหรับตัวอย่างข้างต้น จากรหัสตัวเลข0011 1010 1101 1101เราทราบว่าข้อความธรรมดามีความยาวไม่เกิน 2 ไบต์ อย่างไรก็ตาม สำหรับข้อมูลที่มีความยาว 2 ไบต์ใดๆ ระหว่าง0000 0000 0000 0000และ1111 1111 1111 1111มีแพดที่เมื่อ XOR พร้อมรหัสจะให้ข้อมูลที่แน่นอนแก่เรา และเนื่องจากแพดของเราเป็นแบบสุ่มจริงๆ หากไม่มี ทางออกที่ดีที่สุดสำหรับฝ่ายตรงข้ามในการถอดรหัสรหัสคือการเดาแบบสุ่ม

แพ็ดครั้งเดียว การเข้ารหัสที่ไม่มีประโยชน์มากนัก

หาก OTP นั้นเรียบง่ายแต่มีความปลอดภัยอย่างสมบูรณ์แบบ เหตุใดเราจึงยังต้องการ AES, RSA หรือการเข้ารหัสอื่นๆ อีก คำตอบคือ เนื่องจากเพื่อความปลอดภัยอย่างสมบูรณ์ OTP จึงจำเป็นต้องใช้ในลักษณะที่เฉพาะเจาะจงมาก จะต้องเป็นไปตามข้อกำหนดดังต่อไปนี้

  • แผ่นต้องสุ่มอย่างแท้จริงและมีความยาวอย่างน้อยเท่ากับข้อความธรรมดา
  • ทั้งผู้ส่งและผู้รับต้องมีแผ่นรองและเก็บเป็นความลับ
  • ห้ามใช้แผ่นรองซ้ำ

มาดูแต่ละจุดด้านบนกัน

แผ่นต้องสุ่มอย่างแท้จริงและมีความยาวอย่างน้อยเท่ากับข้อความธรรมดา

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

ตัวสร้างตัวเลขสุ่มเทียมบางตัว เช่นCryptGenRandom , YarrowหรือFortunaถูกเรียกว่าcryptographically -secure ซึ่งหมายความว่าค่าที่ให้นั้นแทบจะแยกไม่ออกจากการสุ่มจริงและเหมาะสมที่จะใช้ในการเข้ารหัส

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

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

ทั้งผู้ส่งและผู้รับต้องมีแผ่นรองและเก็บเป็นความลับ

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

บางท่านอาจสงสัยว่าทำไมเราไม่ใช้เพียงอัลกอริทึมการแลกเปลี่ยนคีย์ เป็นความจริงที่การแลกเปลี่ยนข้อมูลลับในช่องทางที่ไม่ปลอดภัยนั้นไม่ใช่ปัญหาใหม่ การเข้ารหัสคีย์สาธารณะได้แก้ไขมันได้ค่อนข้างดีด้วยอัลกอริทึมอย่าง Diffie–Hellman หรือ ECDH เป็นต้น แต่เมื่อพยายามนำไปใช้กับ OTP เราเผชิญกับอุปสรรคสำคัญสองประการ อันแรกคืออัลกอริธึมการแลกเปลี่ยนคีย์แบบดั้งเดิมได้รับการออกแบบมาสำหรับคีย์ลัดและไม่มีประสิทธิภาพเมื่อใช้แพดขนาดใหญ่ (โปรดจำไว้ว่าแพดต้องมีความยาวอย่างน้อยเท่ากับข้อความธรรมดา) และเหตุผลที่สองก็คือเรื่องของห่วงโซ่และการเชื่อมโยงที่อ่อนแออีกครั้ง ท้ายที่สุด ไม่มีอัลกอริธึมการแลกเปลี่ยนคีย์ใดที่สมบูรณ์แบบ

ห้ามใช้แผ่นรองซ้ำ

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

ฉัน XOR ด้วยแผ่นรองและรับสิ่งนี้ซึ่งดูสุ่มพอ

ตอนนี้ฉันมีภาพอื่นที่นี่

ฉัน XOR ด้วยแผ่นเดียวกันด้านบนและรับภาพสุ่มอีกภาพ

ทุกอย่างดูโอเคใช่มั้ย? ลองเดาดูว่าผลลัพธ์คืออะไรเมื่อเรา XOR ทั้งสองรหัสด้านบน

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

OTP มีประโยชน์หรือไม่?

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

แอปพลิเคชัน OTP ที่มีชื่อเสียงที่สุดที่ฉันนึกถึงคือสายด่วนมอสโก-วอชิงตัน เพื่ออ้างอิงพิพิธภัณฑ์ Crypto

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

เนื่องจาก ETCRRM เป็น One-Time Tape machine (OTT) จึงใช้หลักการของ One-Time Pad (OTP) เมื่อใช้ร่วมกับเทปคีย์สุ่มอย่างแท้จริง เครื่อง OTT จะปลอดภัยและไม่แตกหักอย่างแน่นอน ขณะที่รัสเซียยืนกรานที่จะผลิตกุญแจของตนเอง จึงมีการตัดสินใจว่าแต่ละฝ่ายจะสร้างเทปกุญแจของตนเอง

เทปสำคัญเหล่านี้ถูกส่งโดยผู้ให้บริการขนส่งพิเศษไปยังสถานทูตที่ปลายทางอีกฝั่งหนึ่ง ซึ่งส่งเทปดังกล่าวที่ปลายทางของอีกฝ่ายหนึ่ง [9] ดังนั้น สถานทูตอเมริกันในมอสโกจึงส่งเทปสำคัญที่สถานีสายด่วนมอสโก

บทสรุป

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

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699