ใช่ มันค่อนข้างตรงไปตรงมา
ประการแรก ดูเหมือนว่า Sage จะมีสิ่งนี้ในตัว (ดูที่ ธงคู่แม้ว่าฉันจะไม่ได้ทดสอบก็ตาม)
ฉันจะอธิบายวิธีดำเนินการ "ทางคณิตศาสตร์" เนื่องจากฉันคิดว่ามีประโยชน์ในเชิงแนวคิดมากกว่า
สำหรับโครงตาข่ายที่มีฐาน $B$เป็นที่รู้จักกันดี (ดู ทฤษฎีบท 2) ที่คู่มีพื้นฐาน:
$$D = B (B^t B)^{-1}$$
เป็นไปตามที่ข้อมูลโค้ดต่อไปนี้:
S = sage.crypto.gen_lattice()
D = S * (S.T * S).ผกผัน()
จะสร้างพื้นฐานที่ต้องการ โปรดทราบว่าพื้นฐานไม่ใช่เมทริกซ์จำนวนเต็มโดยทั่วไป --- สำหรับเมทริกซ์ (สุ่ม) $S$ สร้างขึ้นในการดำเนินการของ sage.crypto.gen_lattice()
ฉันเข้าใจว่าสองพื้นฐานคือ:
[ 1/11 0 0 0 -4/11 -3/11 2/11 0]
[ 0 1/11 0 0 -5/11 1/11 -3/11 0]
[ 0 0 1/11 0 0 5/11 -4/11 -5/11]
[ 0 0 0 1/11 -2/11 4/11 4/11 -5/11]
[ 0 0 0 0 1 0 0 0]
[ 0 0 0 0 0 1 0 0]
[ 0 0 0 0 0 0 1 0]
[ 0 0 0 0 0 0 0 1]
พื้นฐาน (เบื้องต้น) ได้รับเลือกให้เป็น $คิว$- สำหรับ $q = 11$.
คุณอาจสังเกตได้จากการปรับขนาดสิ่งต่างๆ $q = 11$เราได้เมทริกซ์จำนวนเต็ม
สิ่งนี้ถือโดยทั่วไปและสามารถเห็นได้โดยสังเกตว่าก $คิว$- ตาข่าย $L$ ตอบสนอง:
\begin{align*}
q\mathbb{Z}^m&\subseteq L\subseteq \mathbb{Z}^m\
\iff (q\mathbb{Z}^m)^*&\supseteq L^* \supseteq \mathbb{Z}^m\
\iff \frac{1}{q}\mathbb{Z}^m&\supseteq L^*\supseteq \mathbb{Z}^m\
\iff \mathbb{Z}^m &\supseteq qL^*\supseteq q\mathbb{Z}^m
\end{จัดตำแหน่ง*}
คือว่าถ้า $q\mathbb{Z}^m\subseteq L\subseteq \mathbb{Z}^m$แล้วในขณะที่ตาข่ายคู่ $L^*$ ไม่อาจอยู่ระหว่าง $q\mathbb{Z}^m$ และ $\mathbb{Z}^m$, ปรับขนาด ตาข่ายคู่อยู่เสมอ
เรามักจะเห็นสิ่งนี้ในเอกสารเป็นข้อความ:
$$\Lambda_q(A)^* = \frac{1}{q}\Lambda_q^\perp(A)$$
ในความเป็นจริงในสัญกรณ์ของ $\Lambda_q(A)$ และ $\Lambda_q^\perp(A)$, คุณเพียงแค่ขอ, ได้รับพื้นฐานสำหรับ $\Lambda_q(A)$เพื่อสร้างพื้นฐานสำหรับ $\Lambda_q^\perp(A)$.