Các tấn công sử dụng lý thuyết lưới lên các lược đồ chữ ký số thường được xây dựng trên giả thiết nào đó về các khóa bí mật của lược đồ Trong [44], [47], các tấn công lên lược đồ chữ ký (EC)DSA đã được thực hiện với giả thiết các khóa bí mật tức thời có các khoảng bit lặp liên tiếp ở vị trí bit có trọng số thấp Dựa trên những kết quả đó, NCS sẽ xây dựng một tấn công tổng quát hóa mà có thể khôi phục khóa bí mật dài hạn lên lược đồ chữ ký số EC-Schnorr Cụ thể, NCS đã xây dựng tấn công khi khóa bí mật tức thời có các khoảng lặp ở vị trí bất kỳ Tấn công tổng quát mà NCS thực hiện phân tích có điểm mạnh ở chỗ kẻ tấn công chỉ cần biết độ dài của khoảng lặp và vị trí bit lặp là có thể tấn công để tìm được khóa bí mật mà không cần biết chính xác giá trị cụ thể của khoảng lặp
Một số trường hợp cụ thể có thể kể như sau, kẻ tấn công có thể khôi phục khóa bí mật dài hạn� nếu anh ta biết trong các khóa bí mật tức thời có 2 hoặc 3 khoảng bit lặp liên tiếp ở vị trí bit có trọng số thấp mà không cần phải biết cụ thể giá trị trong từng khoảng lặp đó (kết quả này là tương tự như trong [44], [47] cho lược đồ chữ ký (EC)DSA) Cụ thể, trong lược đồ chữ ký số EC- Schnorr sử dụng � có kích thước 256 bit nếu có khoảng 100 chữ ký mà ở đó các khóa bí mật tức thời có 2 khoảng bit lặp liên tiếp ở vị trí bit có trọng số thấp và trong mỗi khoảng có 7 bit lặp thì có thể dễ dàng khôi phục được khóa bí mật dài hạn Khi số khoảng lặp được tăng lên thì số bit lặp trong khoảng sẽ được giảm đi Ví dụ, nếu có 3 khoảng lặp liên tiếp ở vị trí bit có trọng số thấp thì có thể khôi phục khóa bí mật dài hạn nếu mỗi khoảng có 3 bit lặp Các kết quả thực nghiệm cho thấy có thể khôi phục các khóa bí mật này trong thời gian một vài phút
Giả sử có� + 1 thông điệp�� (� = 0, … , �) với các chữ ký tương ứng là (�� , �� ), ở đó khóa bí mật tức thời�� có� khoảng bit lặp ở vị trí bất kỳ Tức,
�� có dạng nhị phân như sau:
�� = �⏟0 … ��1−1�⏟�1 … ��1+�−1�⏟�1+� … ��1+�2+�−1�⏟�1+�2+� … ��1+�2+2�−1
�1 � �2 �
… ⏟�=1��+(�−1)� … �∑�=1�� +��−1+⏟�=1��+�� … ��−1 (3 1)
� �−1−(∑��=1��+��)
Ta quy định�0 là bit có trọng số thấp nhất và��−1 là bit có trọng số cao nhất,� là số bit của� Khóa�� được biểu diễn theo các khối như sau:
Khi đó,�� có dạng:
�� = ��1 + 2�1�� + 2�1+���2 + 2�1+�2+��� + 2�1+�2+2���3 + +⋯
�−1 � �
(3 2)
�
1≤ � ≤ � Đặt� là số khoảng giá trị chưa biết trong khóa ký bí mật tức thời ��, được tạo ra khi�� có chứa các khoảng lặp� bit Khi đó, ta có các giá trị �� , � với 1≤ � ≤ � là đã biết, các giá trị chưa biết gồm:�� và��� (với 1≤ � ≤
� + 1)
Mục tiêu của tấn công là tính các giá trị�� ,��� nhằm khôi phục lại khóa ký bí mật tức thời�� với đầu vào của tấn công là các chữ ký��,�� (0 ≤ � ≤ � + 1), độ dài khoảng lặp� và vị trí lặp�� (1 ≤ � ≤ �)
Từ phương trình tính chữ ký
�� = (�� − ��� ) mod �, ∀� = 0, … , � �∑� �∑��
2∑�=1��+(�−1)���� + 2∑�=1��+(�−1)��� + 2∑�=1��+�����+1 , Trong đó 0 ≤ ��� < 2�� , 0 ≤ �� < 2�, 0 ≤ ���+1 < 2�−(∑�=1��+��), với mọi
Ta có: ����−1 − �0�0−1 = ����−1 − �0�0−1, ∀� = 1, … , � Thay�� từ (3 2) vào (3 3), ta có: (3 3) ����−1 − �0�0−1 = (��1 + 2�1�� + 2�1+���2 + 2�1+�2+��� + 2�1+�2+2���3 + �−1 � � 2�1+�2+��0 + 2�1+�2+2��03 + +⋯ �−1 � � = (��1 + 2�1 �� (1 + 2�2+� + ⋯+2∑��=2��+(�−1)� ) + �−1 � � �−1 � (3 4) � của đẳng thức (3 4) với �, ta có � � �−1 �−1 ���0−1�0 + ��� (3 5) Đặt: �� ≔�(����−1 − �0�0−1)�� mod �, �� ≔���0−1 mod � � � �−1 �−1 ��1 ≔�2∑�=1�� +(�−1)����0−1 mod �,�1′ −≔ �2∑�=1��+(�−1)� mod �, ��0 ≔�2∑�=1�� +�����0−1 mod �,�0′ −≔ �2∑�=1��+�� mod �, �2∑�=1��+(�−1)����0−1�0� − �2∑�=1��+(�−1)���� + + ⋯ ����0−1�01 − ���1 + �� = �(����−1 − �0�0−1)�� + �2∑�=1��+�����0−1�0�+1 − �2∑�=1��+�����+1 + Đặt� = 2−�1 (1 + 2�2+� + + 2⋯ ∑�=2�� +(�−1)� ) Nhân cả hai vế−1 2∑�=1��+(�−1)��0� + 2∑�=1�� +���0�+1 )�0−1 ⋯+2∑�=2�� +(�−1)� ) + 2�1+��02 + 2�1+�2+2��03 + +⋯ 2∑�=1��+�����+1 )��−1 − (�01 + 2�1�0(1 + 2�2+� + 2�1+���2 + 2�1+�2+2���3 + + 2⋯ ∑�=1�� +(�−1)���� + 2∑�=1��+���0�+1 )�0−1 2∑�=1��+(�−1)��0� +2∑�=1��+(�−1)��0 + 2∑�=1��+�����+1 )��−1 − (�01 + 2�1�0 + 2�1+��02 + + 2 ⋯ ∑�=1��+(�−1)���� +2∑�=1��+(�−1)��� +
�−� �−�
(với 0 ≤ � ≤ �)
Khi đó, phương trình (3 4) có dạng:
�� = �� + ��0�0�+1 + �0′���+1 + ��1�0� + �1′��� + + ⋯ ����01 + ��′��1 + ���0 +
���, ∀� = 1, … , �
Tiếp theo, ta xây dựng lưới (1 + �(� + 1)) chiều� được sinh bởi ma trận� được xác định như sau:
Ta thấy rằng, nếu một véctơ � có dạng
� = (1, �⏟�+1�0�+1 , ��+1�1�+1 , … , ��+1���+1 , �⏟��0� , ���1� , … , ����� , �+1 �+1 … , �⏟1�01 , �1�11 , … , �1��1 , � �⏟ 0, ��1, … , ��� ) thì � thuộc lưới� �+1 �+1 ��� ≔�2∑�=1��+(�−�)����0−1 mod �,��′ −≔ �2∑�=1��+(�−�)� mod �,
Thật vậy, ta thấy rằng tồn tại véctơ � ∈ ℤ(1+�(�+1)) có dạng:
� = (1, �⏟0�+1 , �1�+1 , … , ���+1 , �⏟0� , �1� , … , ��� , … , �⏟01 , �11 , … , ��1 , �0, �1, … , ��)
�+1 �+1 �+1
sao cho:
�� ∙ �� = ��
Do đó, nếu ta có thể tìm được một véctơ � như vậy trong lưới� thì ta có thể khôi phục được khóa bí mật dài hạn� Do vậy, ta sẽ đưa ra một số điều kiện nào đó để véctơ � là véctơ ngắn trong lưới�, và vì vậy ta có thể thu được
� trong cơ sở rút gọn của lưới Khi đó, ta có thể thu được véctơ � trong cơ sở
rút gọn của lưới Ta thấy rằng độ dài của véctơ� phụ thuộc vào các tham số
�� , ��� , �� với mọi 1 ≤ � ≤ � + 1, 0 ≤ � ≤ � Cụ thể, ta có:
�
2
�=0
�
với mọi 1≤ � ≤ �, 0 ≤ � ≤ � Ta có :
�
Do ta muốn� là véctơ ngắn nhất trong lưới nên ta có thể chọn�� với 1 ≤ � ≤ � + 1 sao cho: 2(�−(∑��=1��+��)) 2 = 1, 22����2 = 1, … , 22�1�12 = 1 và� 222� = 1 � và� = 2−� Khi đó, ta có: z ‖ ‖2 < 1 + �(� + 1) Định thức của lưới�: �+1 det(�) = ��+1�� ∏ ���+1 ≈ 2−(�+1)� 2�� 2 (�+1)((∑��=1��+��)−�−∑��=1��) �=1 = 2−(�+1)� 2�� 2(�+1)(��−�) = 2(�+1)(��−�−�)+�� = 2(�+1)(�−1)�−� Theo Mệnh đề 3 5, nếu: z < √1 + ‖ ‖ �(� + 1) ≤ √ 1 + �( �2 + 1)�� (det(�)) 1 1+�(�+1) =√ 1+ �( � 2+1)�� (2(�+1)(�−1)�−� )1+�(�+1)1
thì� sẽ là véctơ ngắn nhất trong lưới Tương đương, nếu: √1 + �(� + 1) ≤ √ (1+ � ( � 2+1))�� ( � +1)( � −1) �− � (1+�(�+1)) , ( � +1)(� −1) � − � √2 ⟺ �� ≤ 2 1 2 1+�(�+1) ( � +1)( � −1)� − � 1+�(�+1) 1 2 ( � + 1)( � − 1)� − � 1 + �(� + 1) Từ điều kiện 0 ≤ ��� < 2�� , 0 ≤ �� < 2�, 0 ≤ ���+1 < 2�−(∑�=1��+��), z ‖ ‖2 < 1 + ∑��=0 (22(�−(∑�=1��+��))��+1 + 22����2 + + 2⋯ 2�1�212 + � 222� ) ��+1 Suy ra, ta có thể chọn��+1 = 2(∑�=1��+��)−� , �� = 2−�� … , �1 = 2−�1 (2 ⟺ ��) ≤ 2 log ⟺ 2(2��) ≤
(1 +
⟺ �(� + 1)) log 2(2��) + 2� ≤ 2�(� + 1)(� − 1)
⟺ (1 + � �( + 1)) log 2 (2 ��) + 2� )
2(� + 1)(� − 1) ≤ �
thì � sẽ là véctơ ngắn nhất trong lưới, và véctơ này thuộc cơ sở rút gọn của lưới Từ các lập luận trên đưa ta đến khẳng định sau:
Khẳng định 3 6 Trong lược đồ chữ ký số EC-Schnorr sử dụng số nguyên tố
� có kích thước� bit Cho� + 1 thông điệp�� , ( � = 0,1, … , �) với các chữ ký tương ứng là (�� , �� ) Các khóa bí mật tức thời�� có các bit lặp ở dạng phương trình (3 1), trong đó có� khoảng giá trị chưa biết gồm:�� và���
(với 1 ≤ � ≤ � + 1), các giá trị�� , � với 1≤ � ≤ � là đã biết Khi đó, nếu số thông điệp� và độ dài của khoảng bit lặp� thỏa mãn:
(1 + � ( � + 1)) log 2 (2 �� ) + 2�
2(� + 1)(� − 1) ≤ �
thì tồn tại thuật toán có thể tìm được khóa bí mật dài hạn� trong thời gian đa thức
Đầu vào: Các giá trị đã biết gồm (�� , �, �� , �� ) với 1≤ � ≤ �, 1 ≤ � ≤ �
Đầu ra: Khóa bí mật dài hạn� hoặc tấn công không thực hiện được
Bước 1 Tính các giá trị: � −1 mod � �� ≔�(����−1 − �0�0−1)�� mod �, �� ≔���0−1 mod � � � �−1 �−1 �−� �−� (với 0 ≤ � ≤ �)
Bước 2 Xây dựng lưới (1 + �(� + 1)) chiều� được sinh bởi ma trận�
như định nghĩa ở trên
Bước 3 Sử dụng thuật toán tìm cơ sở rút gọn của lưới � Kí hiệu cơ sở rút gọn tìm được là�0, �1, … , �� Khi đó,
��� ≔�2∑�=1��+(�−�)����0−1 mod �,��′ −≔ �2∑�=1��+(�−�)� mod �, ��1 ≔�2∑�=1��+(�−1)����0−1 mod �,�1′ −≔ �2∑�=1��+(�−1)� mod �,
��0 ≔�2∑�=1��+�����0−1 mod �,�0′ −≔ �2∑�=1��+�� mod �, �: = 2−�1 (1 + 2�2+� + + 2⋯ ∑�=2��+(�−1)� )
�� = (1, �⏟�+1�0�+1 , ��+1�1�+1 , … , ��+1���+1 , �⏟��0� , ���1� , … , ����� ,
�+1 �+1
… , �⏟1�01 , �1�11 , … , �1��1 , � �⏟ 0, ��1, … , ���)
�+1 �+1
Bước 4 Tính khóa bí mật tức thời�0
�0 = �01 + 2�1�0 + 2�1+��02 + 2�1+�2+��0 + 2�1+2�+�2�03 + ⋯
�−1 � �
và khóa bí mật dài hạn� = �0−1(�0 − �0) ����
Bước 5 Tính�′ = �� Nếu�′ ≡ � thì tấn công thành công và đưa ra khóa bí mật dài hạn là� Ngược lại, tấn công không thành công
Nhận xét 3 7 Ta sẽ xét trường hợp mà ở đó các khóa bí mật tức thời có� = 2 khoảng bit lặp liên tiếp ở vị trí các bit trọng số thấp và� = 2 khoảng giá trị chưa biết (tức��1 = 0, �1 = 0, ��2 = 0, �2 = 0) Khi đó, khóa bí mật tức thời �� có dạng:
�� = �� (1 + 2� ) + 22���3
trong đó� là số bit của�, trong đó có các giá trị 0 ≤ �� < 2�, 0 ≤ ��3 < 2�−2� là chưa được biết, các giá trị �, � là đã biết Nói cách khác, khóa��
được biểu diễn như sau:
Khi đó theo Khẳng định 3 6, nếu số thông điệp� và độ dài của khoảng bit lặp� thỏa mãn:
� ≥ (2 � + 3) 2( ��� 2(2 ��) + 2� � + 1)
thì có thể khôi phục khóa bí mật dài hạn� trong thời gian đa thức Khi sử dụng� có kích thước� = 256 bit, nếu có 100 chữ ký thì ta có thể khôi phục khóa bí mật� nếu khóa ký bí mật tức thời có 2 khoảng lặp liên tiếp ở vị trí bit trọng số thấp và độ dài của khoảng bit lặp � thỏa mãn� ≥
(200+3) log2 (2 � �)+512
2(100+1) hay� ≥ 7
Nhận xét 3 8 Ta sẽ xét trường hợp mà ở đó các khóa bí mật tức thời có� = 3 khoảng bit lặp liên tiếp ở vị trí bit có trọng số thấp và có� = 2 khoảng giá trị chưa biết (tức��1 = 0, �1 = 0, ��2 = 0, �2 = 0, ��3 = 0, �3 = 0) Khi đó,
khóa bí mật tức thời�� có dạng:
�� = �� (1 + 2� + 22� ) + 23���4
trong đó� là số bit của�, hai giá trị 0 ≤ �� < 2�, 0 ≤ ��4 < 2�−3� là chưa được biết Các giá trị�, � là đã biết
Khi đó theo Khẳng định 3 6, nếu số thông điệp� và độ dài của khoảng bit lặp� thỏa mãn:
� ≥ (2 � + 3) 4( ��� � + 1)2 (2 ��) + 2�
thì có thể khôi phục khóa bí mật dài hạn a trong thời gian đa thức Khi sử dụng� có kích thước� = 256 bit, nếu có 100 chữ ký thì ta có thể khôi phục khóa bí mật� nếu khóa ký bí mật tức thời có 3 khoảng lặp liên tiếp ở vị trí các bit trọng số thấp và độ dài của khoảng bit lặp� thỏa mãn:
Nhận xét 3 9 Ta sẽ xét trường hợp mà ở đó các khóa bí mật tức thời có 2 khoảng bit lặp ở các vị trí bất kỳ và có 4 khoảng giá trị chưa biết Khi đó, khóa bí mật tức thời�� có dạng:
�� = ��1 + 2�1�� + 2�1+����2 + 2�1+�2+��� + 2�1+�2+2���3
trong đó� là số bit của�, các giá trị��1 , �� , ��2 , ��3 là chưa được biết Các giá trị�, � là đã biết
Khi đó theo Khẳng định 3 6, nếu số thông điệp� và độ dài của khoảng bit lặp� thỏa mãn:
� ≥ (4 � + 5) 2( ��� � + 1)2 (2 ��) + 2�
thì có thể khôi phục khóa bí mật dài hạn a trong thời gian đa thức Khi sử dụng� có kích thước� = 256 bit, nếu có 100 chữ ký thì ta có thể khôi phục khóa bí mật� nếu khóa ký bí mật tức thời có 2 khoảng bit lặp ở vị trị bất kỳ nếu� thỏa mãn� ≥ (400+5) log2 (2 � �)+512
2(100+1) hay � ≥ 9
Ta thấy rằng khi lặp không liên tiếp thì số khoảng giá trị chưa biết sẽ tăng lên, do đó số bit lặp trong một khoảng cũng tăng lên Vì vậy trong tấn công thực tế, kẻ tấn công luôn muốn xây dựng những trường hợp tấn công để hắn có thể thực hiện đơn giản nhất Nói cách khác, kẻ tấn công có xu hướng tạo ra những khoảng bit lặp liên tiếp ở vị trí bit có trọng thấp
3 1 3 Các kết quả thực nghiệm
Thuật toán 3 1 đã được cài đặt thực nghiệm với các trường hợp có� =2 và� =3 khoảng bit lặp liên tiếp ở vị trí bit có trọng số thấp và có� = 2
khoảng giá trị chưa biết bằng cách sử dụng phần mềm tính toán đại số Magma trên máy tính với năng lực tính toán CPU Intel Core i7-6700 3 4 Ghz, 8Gb RAM Trong mỗi trường hợp, NCS đã thực hiện 10 lần tấn công5, sau đó kiểm tra tỉ lệ thành công cũng như thời gian thực hiện trung bình đạt được Trong lược đồ chữ ký EC-Schnorr, NCS sử dụng các tham số NIST trong [40] với� có kích thước 256 bit cùng với đường cong elliptic�: � 2 = � 3 + �� + � được định nghĩa trên trường hữu hạn��:
https://github com/khucxuanthanh/Attack-on-EC-Schnorr
Số chữ ký Số bit lặp
Thuật toán LLL Thuật toán BKZ Thời gian (giây) Tỉ lệ thành công Thời gian (giây) Tỉ lệ thành công 10 29 0,08 100% 0,14 100% 20 18 0,4 100% 1,1 100% 30 15 1,1 60% 4,7 100% 40 15 2,3 80% 13,7 100% 50 15 4,5 100% 28,2 100% 60 15 8,1 100% 43,4 100% 70 15 12,7 100% 72,4 100% �: = 1157920892103562487626974469494075735 30086143415290314195533631308867097853951 �≔ -3 �≔ 41058363725152142129326129780047268409 114441015993725554835256314039467401291 �: = 1157920892103562487626974469494075735 29996955224135760342422259061068512044369
Nhận xét 3 10 Việc sử dụng thuật toán BKZ khi số chiều lưới lớn sẽ cho cơ
sở lưới rút gọn tốt hơn Điều này dẫn tới tỉ lệ thực hiện thành công sẽ cao hơn khi sử dụng thuật toán LLL Tuy nhiên, thời gian thực hiện tấn công khi sử dụng thuật toán BKZ sẽ lớn hơn thuật toán LLL Bên cạnh đó, kết quả thực nghiệm và lý thuyết vẫn còn một khoảng cách nhỏ Chẳng hạn, về mặt lý thuyết nếu có 100 thông điệp thì Thuật toán 3 1 sẽ thành công khi có 2 khoảng bit lặp lại với độ dài bit lặp là� ≥ 7, tuy nhiên, thực nghiệm chỉ thành công khi� ≥ 8 và không thành công khi� = 7 Tương tự, về mặt lý thuyết với� = 3, Thuật toán 3 1 sẽ thành công khi� ≥ 3, tuy nhiên kết quả thực nghiệm chưa đạt được cho� = 3, 4 mà chỉ thành công khi� = 5 Điều
Số chữ ký Số bit lặp
Thuật toán LLL Thuật toán BKZ Thời gian (giây) Tỉ lệ thành công Thời gian (giây) Tỉ lệ thành công 10 15 0,09 100% 0,8 100% 20 10 0,4 100% 1,2 100% 30 9 1,2 100% 6 100% 40 8 2,4 40% 15,5 100% 50 8 4,7 80% 31 100% 60 8 8,3 100% 43,1 100% 70 8 13,8 100% 59,9 100% 80 7 21,4 0% 114,9 100% 90 6 33,6 0% 167,1 100% 100 5 48,6 0% 263,5 100% 100 4 59,4 0% 310,3 0% 80 15 18,8 100% 110,1 100% 90 15 30,5 100% 139,6 100% 100 14 43,9 20% 248,2 100% 100 13 48,9 0% 269,2 100% 100 8 47,3 0% 270,2 100% 100 7 42,9 0% 290,1 0%
này có thể được lý giải là thuật toán rút gọn cơ sở lưới LLL, BKZ chưa đạt được đến cận như giả thiết heuristic trong Mệnh đề 3 5 Do đó, để giải quyết các trường hợp mà tấn công không thực hiện thành công, ta cần một thuật toán rút gọn cơ sở tốt hơn nữa