Điểm:1

Chỉ sử dụng một hoặc hai vectơ thử nghiệm cho ChaCha20 có đủ để xác thực thuật toán được mã hóa không?

lá cờ it

Để xác thực thuật toán mã hóa/giải mã ChaCha20 được viết bằng VB.NET, tôi đang tìm thêm các vectơ thử nghiệm ChaCha20 dựa trên thông số kỹ thuật cuối cùng cho ChaCha20 có thể tìm thấy đây. Xem véc tơ kiểm tra trong tiểu chương 2.3.2. Vectơ thử nghiệm này xác thực mã của tôi, mã này cung cấp kết quả chính xác được chỉ định trong vectơ thử nghiệm. (có một vectơ gần như giống hệt nhau sau này trong tài liệu, hai khối với các bộ đếm khác nhau, cũng xác thực hoàn hảo đối với điều đó).

Các vectơ thử nghiệm mà tôi tìm thấy trong thông số kỹ thuật ChaCha20 dự thảo không cho kết quả chính xác như được chỉ định trong các vectơ thử nghiệm thông số kỹ thuật dự thảo này. Họ đang sử dụng một nonce có kích thước khác so với thông số kỹ thuật cuối cùng (64 bit nháp, 96 bit cuối cùng) và trạng thái của bộ đếm không được chỉ định (tôi cho rằng nó là 0).

Tất nhiên, câu hỏi đặt ra là nếu chỉ một hoặc hai vectơ thử nghiệm là đủ để xác thực cách mã hóa thuật toán mã hóa, thì linh cảm của tôi là điều đó rất tốt hơn nhưng nói rằng với tư cách là một người nghiệp dư về mật mã thực sự.

Sẽ thật tuyệt nếu có nhiều vectơ thử nghiệm hơn dựa trên thông số ChaCha20 cuối cùng để đảm bảo mã cung cấp kết quả chính xác cần thiết. Cảm ơn bạn!

    2.3.2. Vector thử nghiệm cho chức năng khối ChaCha20

   Đối với một vectơ thử nghiệm, chúng tôi sẽ sử dụng các đầu vào sau cho ChaCha20
   chức năng khối:

   o Khóa = 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:
      14:15:16:17:18:19:1a:1b:1c:1d:1e:1f. Chìa khóa là một chuỗi các
      octet không có cấu trúc cụ thể trước khi chúng tôi sao chép nó vào
      trạng thái ChaCha.

   o Nonce = (00:00:00:09:00:00:00:4a:00:00:00:00)

   o Số khối = 1.

   Sau khi thiết lập trạng thái ChaCha, nó trông như thế này:

   Trạng thái ChaCha với thiết lập khóa.

       61707865 3320646e 79622d32 6b206574
       03020100 07060504 0b0a0908 0f0e0d0c
       13121110 17161514 1b1a1918 1f1e1d1c
       00000001 09000000 4a000000 00000000

   Sau khi chạy 20 vòng (10 vòng cột xen kẽ 10
   "vòng chéo"), trạng thái ChaCha trông như thế này:

   Trạng thái ChaCha sau 20 hiệp

       837778ab e238d763 a67ae21e 5950bb2f
       c4f2d0c7 fc62bb2f 8fa018fc 3f5ec7b7
       335271c2 f29489f3 eabda8fc 82e46ebd
       d19c12b4 b04e16de 9e83d0cb 4e3c50a2

   Cuối cùng, chúng tôi thêm trạng thái ban đầu vào kết quả (vector đơn giản hoặc
   bổ sung ma trận), đưa ra điều này:

   Trạng thái ChaCha khi kết thúc hoạt động ChaCha20

       e4e7f110 15593bd1 1fdd0f50 c47120a3
       c7f4d1c7 0368c033 9aaa2204 4e6cd4c3
       466482d2 09aa9f07 05d7c214 a2028bd9
       d19c12b5 b94e16de e883d0cb 4e3c50a2
Điểm:1
lá cờ in

Tôi muốn nói rằng đây là một phần trường hợp. Do các vòng, ngay cả một thao tác khối đơn lẻ cũng sẽ được thực hiện khi sử dụng nhiều lần. Một khối cũng không nhận bất kỳ đầu vào đặc biệt nào: bạn có một khối được ánh xạ tới một khối đầu ra.

Tuy nhiên, đó không phải là toàn bộ câu chuyện. Trước hết, một số phép tính trong các vòng có thể cần nhiều phép thuật hơn bình thường một chút. Nếu có bất kỳ trường hợp cạnh nào có thể xảy ra thì những trường hợp đó có thể không được kích hoạt bởi một thao tác khối đơn lẻ. Những người bạn nên kiểm tra riêng.

Quan trọng hơn: trong khi phần trên kiểm tra hoạt động của khối, nó không kiểm tra hoạt động phát trực tuyến. Điều này có nhiều khả năng gây ra vấn đề. Vấn đề là mã hóa/giải mã (ví dụ: byte thành từ) và bộ đệm ít tầm thường hơn nhiều người mong đợi. Vì vậy, thật hợp lý khi kiểm tra tất cả các loại kích cỡ văn bản gốc và đảm bảo rằng cập nhật chức năng thực hiện chính xác. Điều này không quá khác biệt so với việc kiểm tra các chức năng không mã hóa; chẳng hạn, bạn sẽ gặp các sự cố tương tự với hoạt động mã hóa/giải mã và I/O.

Một vấn đề mà tôi đã thấy nhiều lần là các nhóm thử nghiệm bỏ qua việc triển khai. Việc kiểm tra dựa trên các thông số kỹ thuật kiểm tra chính thức đều ổn, nhưng nếu có các lựa chọn thiết kế triển khai cụ thể được đưa ra, thì những lựa chọn này cũng nên được kiểm tra. Ví dụ: rất có thể việc triển khai bị tràn bộ đệm ngay cả khi tất cả các thử nghiệm chính thức đều chạy mà không gặp sự cố. Tôi sẽ không lặp lại bất kỳ câu chuyện kinh dị nào ở đây, nhưng vâng...

Cuối cùng, vì đây là một trang web mật mã: nếu bạn đưa ra bất kỳ tuyên bố nào về việc bảo vệ chống lại các cuộc tấn công kênh bên thì có lẽ bạn cũng nên kiểm tra những điều đó. Tất nhiên, bạn hơi may mắn ở đây vì Bernstein thường giả định các loại tấn công này khi thiết kế mật mã - nhưng việc triển khai có thể dễ bị tấn công.


Tất cả điều này đã nói, sẽ không bao giờ gây hại khi chạy triển khai của bạn dựa trên một tập hợp mở rộng hơn. Chỉ cần lấy bất kỳ thư viện hiện có nào (hoặc hai thư viện độc lập) và tự tạo một tập hợp lớn các vectơ. Một lần nữa, tập trung vào các trường hợp cạnh; thực hiện một chút thử nghiệm mờ cũng không bao giờ gây hại.

DotNET Afficionado avatar
lá cờ it
Cảm ơn bạn Maarten (Tôi muốn nâng cao câu trả lời của bạn nhưng thành viên mới tại đây tại https://crypto.stackexchange.com/ cần 15 điểm sau đó có thể nâng cấp) điều này thật tốt khi biết. Tôi đã thử nghiệm với các luồng phụ mà tôi mã hóa và giải mã, sau đó kiểm tra xem chúng có giống với 'văn bản gốc' ban đầu hay không, nhưng vâng, tôi cần tự động hóa điều này để kiểm tra nhiều luồng phụ và xem liệu tôi có gặp phải một số trường hợp cạnh kỳ lạ hay không. Việc một số vectơ kiểm tra từ thông số kỹ thuật dự thảo không cho kết quả tương tự khiến tôi hơi lo lắng.
DotNET Afficionado avatar
lá cờ it
Điều đáng lo ngại nữa là một số tài liệu VB.NET có vẻ không chính xác đối với việc xoay bit, ở đây nó nói rằng ngay cả đối với các số nguyên không dấu, bit thứ 32 sẽ luôn được che dấu thành 0, điều này thực tế không đúng (sẽ vô nghĩa đối với các số nguyên không dấu ). Lo lắng rằng một cái gì đó kỳ lạ hoặc tài liệu kém trong VB.NET tạo ra một trường hợp khó khăn mà tôi không biết cho đến khi nó tạo ra một vấn đề thực sự. Xem: https://docs.microsoft.com/en-us/dotnet/visual-basic/lingu-reference/operators/left-shift-operator
DotNET Afficionado avatar
lá cờ it
Bài đăng này cũng xác định vấn đề về các vectơ kiểm tra từ các bản nháp không (luôn luôn) hoạt động mặc dù các vectơ thông số kỹ thuật cuối cùng là hoàn hảo, ở đây anh ấy xác định một vấn đề với bộ đếm nhưng đó không phải là điều tôi tìm thấy. Chỉ vectơ kiểm tra tất cả các số không (khóa, nonce & bộ đếm được đặt thành tất cả các số không) mới có kết quả đúng, nếu tôi sử dụng ví dụ trong đó khóa = 1 (có nghĩa là từ 32 bit cuối cùng trong khóa, vị trí 11 trong ChaCha matrix, được đặt thành 1), tôi nhận được kết quả cuối cùng khác. Xem https://crypto.stackexchange.com/questions/81337/chacha-matrix-tests-for-original-implementation-not-passing-due-to-bad-counter

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.