Score:2

จะคำนวณ / สร้าง S-box ผกผันของรหัสบล็อก Kuznyechik ได้อย่างไร

ธง pf

สมมติว่าฉันต้องการแก้ไข บล็อกรหัส Kuznyechik โดยเลือก S-box แบบสุ่ม (นำมาจาก /dev/random เป็นต้น)

ฉันจะคำนวณ/สร้าง S-box ผกผันได้อย่างไร

ใครรู้สูตรหรืออัลกอริทึมที่ใช้ในการทำสิ่งนี้บ้าง?

Score:2
ธง cn

สมมติว่า S-boxes เป็นการเปลี่ยนแปลง

นี่คือตัวอย่างใน Python:

S = (2, 0, 1)
ผกผัน = [0] * เลนส์ (S)

สำหรับผมในระยะ(เลนส์(S)):
    ผกผัน[S[i]] = i

พิมพ์ (ผกผัน)

นี่คือตัวอย่างใน C:

int ที่ไม่ได้ลงชื่อ S[256] = {...};
int inverse ที่ไม่ได้ลงชื่อ [256];

สำหรับ (int i = 0; i < 256; i++)
{
    ผกผัน[S[i]] = i;
}
phantomcraft avatar
pf flag
ค่อนข้างง่าย ฉันไม่คิดว่ามันจะง่ายขนาดนั้น ขอบคุณ!
Score:2
ธง in

เสจมาธ แพ็คเกจ SBox เป็นเพื่อนของผู้เรียน/นักออกแบบ SBox

สำหรับ SBox ที่พลิกกลับได้

# 0 1 2 3 4 5 6 7 #ดัชนี
S = SBox([0, 1, 3, 6, 7, 4, 5, 2]) #เอาต์พุต
Sinv = S.ผกผัน()
พิมพ์ (Sinv)

เอาต์พุต

(0, 1, 7, 2, 5, 6, 3, 4)

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


โปรดทราบว่าซอร์สโค้ดของ SageMath SBox คือ ที่นี่ และในฐานะที่เป็นไลบรารีที่ดี ขั้นแรกจะควบคุม SBox ว่าเป็นการเรียงสับเปลี่ยนหรือไม่ และส่งกลับออบเจกต์ SBox

        ถ้าไม่ใช่ self.is_permutation():
            เพิ่ม TypeError ("S-Box ต้องมีการเรียงสับเปลี่ยน")

        cdef Py_ssize_t ฉัน
        รายการ cdef L = [self._S_list[i] สำหรับฉันในช่วง (1 << self.m)]

        ส่งคืน SBox([L.index(i) สำหรับฉันในช่วง (1 << self.m)],
                    big_endian=self._big_endian)
phantomcraft avatar
pf flag
ขอบคุณสำหรับการตอบกลับ. คุณรู้จักแพ็คเกจ/โปรแกรมที่คล้ายกันใน C/C++ ซึ่งทำเช่นเดียวกันกับแพ็คเกจ Sagemath SBox หรือไม่
kelalaka avatar
in flag
@phantomcraft ฉันไม่รู้ อย่างไรก็ตาม คุณสามารถใช้มันใน [Python](https://stackoverflow.com/q/61408795/1820553)
phantomcraft avatar
pf flag
รับทราบครับ ขอบคุณครับ
phantomcraft avatar
pf flag
ขออภัย ฉันเลือกคำถามอื่นว่า "มีประโยชน์" เพราะฉันสนใจในการใช้งาน C
kelalaka avatar
in flag
@phantomcraft คุณกำลังถามผิดไซต์ [ดังนั้น]นี่ไม่ใช่ไซต์เขียนโปรแกรม และคุณถามว่า "มีใครรู้สูตรหรืออัลกอริทึมที่ใช้ในการทำสิ่งนี้บ้าง" ดังนั้นฉันจึงให้วิธีที่ง่ายที่สุดและอัลกอริทึมง่ายๆ แก่คุณ `ย้อนกลับความสัมพันธ์ของดัชนีกับเอาต์พุต' หากปราศจากคำตอบของฉัน คำถามนี้ก็นอกประเด็นไปเสียแล้ว มีความสุข.
kelalaka avatar
in flag
ดังที่คุณเห็นจากซอร์สโค้ด SageMath การค้นหาสิ่งที่ตรงกันข้ามโดยตรงไม่ใช่วิธีที่ถูกต้อง อย่าเชื่อ SBox ที่ดาวน์โหลดจากอินเทอร์เน็ตสุ่มสี่สุ่มห้า...

โพสต์คำตอบ

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