Điểm:0

Thuật toán mật mã bất đối xứng (như RSA) có đủ cho tất cả các nhu cầu cơ bản không, khi tốc độ không liên quan?

lá cờ br

Tại sao tôi quan tâm: Tôi muốn triển khai một số phiên bảo mật để liên lạc qua internet và vì tôi hoàn toàn là một người nghiệp dư trong lĩnh vực này và không muốn dành nhiều thời gian để tìm hiểu về mật mã hoặc về các thư viện cụ thể (vì tôi làm điều này chỉ để giải trí), tôi muốn có sự chuẩn bị tối thiểu từ phía lập trình. Về khía cạnh toán học, tôi giỏi môn này, vì vậy việc dành thêm thời gian để suy nghĩ (trái ngược với việc tìm kiếm trên Google và đọc tài liệu) không phải là vấn đề.

phỏng đoán/câu hỏi của tôi: Phần thú vị xuất hiện khi tôi nhận ra rằng chỉ có một mật mã bất đối xứng (khối hoặc luồng), hãy gọi nó là $X$, là đủ cho tất cả các nhu cầu mật mã cơ bản.Nói cách khác, tất cả các danh mục mật mã cơ bản khác (các loại mật mã khác, hàm băm và chữ ký, không có loại nào khác) có thể được rút gọn thành thuật toán này; bạn có thể tạo thuật toán băm chỉ bằng cách sử dụng $X$, và thuật toán ký chỉ sử dụng $X$. Điều này có nghĩa là việc kết hợp các thuật toán như RSA+ChaCha+Poly1305 hoặc bất kỳ thuật toán nào không lỗi thời khi tốc độ không liên quan. Tôi không đặt mục tiêu cao hơn là truyền thông internet. FHE và tương tự nằm ngoài phạm vi. Sau đó, nó không đủ để thực hiện chỉ $X$ khi thời gian và tốc độ không liên quan? Tại sao sau đó mọi người lại phát minh ra tất cả các thuật toán này, ngoài lý do tốc độ?

Bằng chứng của tôi:

Biến mật mã dòng thành mật mã khối:

Chỉ cần xử lý một luồng có độ dài cố định bằng mật mã luồng và gọi nó là mật mã khối.

Chuyển một mật mã khối hoạt động trên một tập hợp có kích thước tùy ý thành một mật mã khối hoạt động trên một tập hợp có kích thước lũy thừa $2$.

Để cho $A$ là bộ $\{1,\dots,N\}$. Để cho $X$ là một mật mã khối với hai chức năng $E$$D$ (chức năng mã hóa và giải mã) ánh xạ các phần tử từ $A$ đến $A$. Để cho $2^k$ là sức mạnh lớn nhất của $2$ nhỏ hơn hoặc bằng $N$. Để cho $B$ là bộ $\{1,\dots,2^k\}$. Để cho $x$ là một số từ $A$. Trình tự $x,E(x),E(E(x)),...$ được giả định là ngẫu nhiên và phân phối đều trên tập hợp $A$ (cũng là một chu kỳ looong, vì đây là một mật mã bất đối xứng), mang lại một số từ $B$ trung bình xảy ra sau mỗi $\frac{|B|}{|A|}$ phần tử. Chúng ta có thể lấy sự xuất hiện đầu tiên như hình ảnh của chức năng mới $E'$ mà bây giờ ánh xạ từ $B$ đến $B$. Định nghĩa $D'$ là nghịch đảo của $E'$. cặp $(E',D')$ là một mật mã khối mới hoạt động trên một tập kích thước $2^k$, nói cách khác trên các khối $k$ chút ít. Nó an toàn như $X$ bởi vì nếu chúng ta có thể bẻ khóa mật mã này thì điều đó có nghĩa là chúng ta có thể tìm thấy kết quả của mật mã ban đầu được áp dụng một vài lần, chẳng hạn $m$ lần.Sau đó, chúng ta chỉ có thể áp dụng lại mật mã $m-1$ nhiều lần hơn trên một tin nhắn được mã hóa và sau đó sử dụng bản crack này để hoàn tác nó $m$ lần. Từ $m$ dự kiến ​​​​sẽ ít hơn $k$, điều này là khả thi.

Biến một mật mã khối có kích thước $2^k$ thành mật mã dòng.

Hãy giả sử $k$ là số chẵn (giải thích khái niệm này đơn giản hơn). Về mặt kỹ thuật, tôi chỉ mã hóa và giải mã một tin nhắn có kích thước tùy ý, đây không chính xác là mật mã luồng. Đầu tiên, mở rộng tin nhắn để có độ dài là bội số của $\frac{k}{2}$. Hãy nghĩ về thông điệp này như một chuỗi các khối có kích thước $\frac{k}{2}$. Chúng ta có thể mã hóa tại chỗ các cặp khối này: khối thứ nhất và khối thứ hai cùng nhau, sau đó là khối thứ hai và thứ ba, v.v.... cho đến hết. Cho đến bây giờ, điều này giống như một mật mã dòng. Chúng tôi có thể tùy chọn thêm một số bắt đầu ngẫu nhiên vào tin nhắn nếu ban đầu tin nhắn quá ngắn. Chúng ta cũng có thể tùy chọn đảo ngược thứ tự của các khối này và áp dụng trình tự mã hóa tương tự. Bây giờ, chúng tôi có thể giải mã toàn bộ tin nhắn hoặc không giải mã gì: Nếu chúng tôi mất một phần của nó, chúng tôi không thể giải mã bất cứ thứ gì. Giống như mật mã khối ban đầu có nghĩa là hoạt động. Điều này an toàn như mật mã khối ban đầu vì nếu chúng tôi có thể bẻ khóa toàn bộ tin nhắn, thì chúng tôi có thể chạy lại quá trình mã hóa và tạo ra tất cả các sản phẩm liên kết, bao gồm cả việc giải mã 2 khối cuối cùng mà bộ mã hóa đã mã hóa.

Biến mật mã khối thành hàm băm.

Tôi đã chỉnh sửa phần này, vì ý tưởng đầu tiên đã sai ...
Tạo hai cặp khóa và loại bỏ các khóa riêng và mã hóa cứng các khóa chung trong thuật toán. Giống như int phần trước, hãy chuẩn bị các khối. Bây giờ mã hóa đầu tiên $k$ các bit tại chỗ trước tiên bằng một phím, sau đó với phím kia, loại bỏ $l<<k$, $l|k$ bit "ngẫu nhiên" (giả ngẫu nhiên, được tạo bởi một số hàm băm đơn giản của thông báo) từ điều này được tạo ra $k$ bit và nối các bit còn lại. Tiếp tục làm điều này cho đến khi chỉ có $k$ bit còn lại, sau đó gọi nó là hàm băm mạnh.Điều này an toàn như mật mã, bởi vì nếu giả sử chúng tôi tìm thấy một thông báo khác có cùng đầu ra, thì trong khi chúng tôi đang băm lại cả hai thông báo đó cùng một lúc, tại một thời điểm nào đó, chúng tôi sẽ tạo ra cùng một thông báo $k-l$ bit (sau khi loại bỏ ngẫu nhiên $l$ chút ít). Đây là lý do tại sao nó khó: $k-l$ bit có thể được điền vào $k$ nhiều nhất là bit $2^l\binom{k}{l}$ cách (mà chúng ta có thể ràng buộc với một số lượng nhỏ), thì hầu hết chúng sẽ không tạo ra giống nhau $k-l$ bit giúp giới hạn nó, thì ngay cả khi chúng ta có thể giải mã một tổ hợp khác của $k$ bit (điều này có thể có thể xảy ra vì chúng giống với bản gốc $k$ bit), dữ liệu được giải mã $k$ các bit sẽ phải được giải mã lại, nhưng bây giờ chúng không giống với bản gốc $k$ bit, vì vậy về cơ bản chúng tôi sẽ phải bẻ khóa mật mã vào thời điểm này. Chúng tôi sử dụng hai mật mã khác nhau (hai khóa công khai khác nhau) vì chúng tôi muốn loại bỏ bất kỳ tính linh hoạt nào.

Biến một mật mã khối thành một chức năng chữ ký.

Trước tiên, chúng ta có thể tính toán hàm băm của tin nhắn và sau đó mã hóa hàm băm. Điều này rõ ràng là an toàn, vì đây là cách các thuật toán hiện tại hoạt động.

Tôi xin lỗi vì đã sử dụng các thẻ khác nhau, tôi chỉ không biết nên sử dụng thẻ nào.

Maarten Bodewes avatar
lá cờ in
Các nguyên hàm bất đối xứng phổ biến cũng có chi phí chung khi nói đến mã hóa, điều đó có được tính không? Hơn nữa, RSA/OAEP phụ thuộc vào hàm băm miền đầy đủ. Cuối cùng, RSA yêu cầu kích thước khóa rất cao để vượt qua mức bảo mật 128 bit và nó không được bảo vệ trước các máy tính lượng tử.
donaastor avatar
lá cờ br
@MaartenBodewes Tôi không biết gì về những điều này.Khi tôi đề cập đến "mật mã khối bất đối xứng", tôi đã giả sử một cặp hàm (E, D) có miền và đồng miền là cùng một tập hợp. Bạn có thể coi E và D là khóa chung và khóa riêng. Nếu nó được thực hiện bằng cách sử dụng một số nguyên thủy khác, tôi không quan tâm. Tôi chỉ muốn giảm mọi thứ khác thành X, vì vậy tôi có thể học cách chỉ sử dụng RSA và sau đó chơi với mã của mình thay vì đọc thêm về thư viện. Tôi không biết hàm băm trên toàn miền và tên miền đầy đủ là gì. RSA cần các khóa lớn không phải là mối quan tâm lớn đối với tôi, có lẽ một số thuật toán khác thì không
lá cờ cn
"tất cả các nhu cầu" chắc chắn là nhắm mục tiêu quá cao, vì nó bao gồm nhiều thứ hơn là chỉ những thứ cơ bản. Ví dụ, không thể sử dụng sơ đồ mã hóa bất đối xứng tùy ý để đạt được mã hóa đồng hình hoàn toàn.
donaastor avatar
lá cờ br
@tylo ok, vâng, đúng vậy. Tôi biết về FHE, tôi đã quan tâm đến nó, tôi vẫn quên nó, bây giờ tôi sẽ chỉnh sửa để cụ thể hơn về những gì tôi muốn nói.
Maarten Bodewes avatar
lá cờ in
Vấn đề là RSA trong sách giáo khoa thậm chí không an toàn. Vì vậy, bây giờ bạn nói điều gì đó như: này, tôi có thuật toán không an toàn này, tại sao mọi thứ không dựa trên nó.Bạn cũng đang bỏ qua hiệu quả và các trường hợp sử dụng thích hợp hơn, mà *không nên* bỏ qua. Chắc chắn, việc cố gắng để một thuật toán phù hợp với càng nhiều lỗ hổng càng tốt là hữu ích, hãy xem Keccak để biết điều đó, bao gồm hàm băm, dẫn xuất khóa, tạo số ngẫu nhiên (ở một mức độ nào đó), mã hóa được xác thực, v.v. Cũng lưu ý rằng việc tạo và mã hóa chữ ký yêu cầu các cặp khóa khác nhau của cả hai người tham gia, vì vậy cũng có điều đó.
Maarten Bodewes avatar
lá cờ in
Thành thật mà nói, trả lời câu hỏi này dường như yêu cầu giải thích về hầu hết tất cả các loại mật mã, điều này hơi rộng đối với một câu hỏi.
Điểm:2
lá cờ ng

Xin lưu ý rằng bên cạnh RSA, chúng tôi không biết nhiều "mật mã khối bất đối xứng" theo định nghĩa của câu hỏi (về cơ bản là hoán vị cửa sập), do đó, việc xây dựng trên điều này sẽ không cho phép thay thế bằng thứ gì đó nhanh hơn hoặc chống lại giả thuyết Máy tính lượng tử liên quan đến mật mã.

Trong bất cứ điều gì được áp dụng ngay cả ở quy mô thử nghiệm, luôn có một số giới hạn về mức độ tốc độ là không liên quan có thể giữ được. Cách tiếp cận được đề xuất sẽ đánh vào bức tường đó, tôi tin rằng có hai điều

  • Chữ ký và giải mã RSA trong sách giáo khoa chậm hơn vài bậc thập phân so với tiền điện tử đối xứng, do đó, cuối cùng bạn sẽ cần đến mật mã lai để có tốc độ có thể vượt qua.
  • Quá trình tạo khóa RSA một lần nữa chậm hơn một số bậc thập phân về độ lớn so với chính RSA và thiết lập khóa với bảo mật chuyển tiếp (một tính năng tiêu chuẩn của SSL/TLS hiện đại mà nhiều người cho rằng đã trở thành cơ bản) bằng cách sử dụng RSA (hoặc được xây dựng dựa trên một số lược đồ mã hóa bất đối xứng ) dường như yêu cầu tạo khóa tại mỗi phiên.

Cuối cùng, hoán vị cửa sập RSA không phải là lý tưởng. Nó có điểm cố định ${0,1,n-1}$, và nói chung hơn là một thuộc tính nhân. Nghĩ về nó như một giải pháp thay thế bất đối xứng cho một mật mã khối lớn là một công thức dẫn đến thảm họa, đã được thử và kiểm tra trong những thập kỷ đầu tiên của RSA, và tính ra, như biên niên sử tại một thời điểm nào đó của Dan Boneh. Có rất nhiều giải pháp, nhưng ít nhất những giải pháp phổ biến hoặc có bằng chứng về bảo mật đều giả sử băm. Như vậy "bạn có thể tạo thuật toán băm chỉ bằng cách sử dụng" (cửa sập RSA), trong khi có thể, mang tính mạo hiểm bên cạnh sự chậm chạp.

Điểm:1
lá cờ cm

Đối với cùng kích thước khóa, các giao thức mã hóa đối xứng an toàn hơn các giao thức bất đối xứng.

Một cách không chính thức, các thuật toán phân tích mật mã được sử dụng để giải mã RSA cố gắng xác định các giá trị nguyên tố được sử dụng để tạo ra một giá trị N, trong khi các thuật toán (tôi rất có thể sai ở đây) được sử dụng để phá vỡ các sơ đồ mã hóa đối xứng dựa trên nhận dạng cưỡng bức của thông điệp văn bản gốc, dựa trên một cuộc tấn công văn bản rõ đã biết và trong việc phát hiện một số mẫu trong phân phối bit của bản mã .

Sự khác biệt về tính bảo mật của các thuật toán này là mã hóa AES với kích thước khóa 128 bit khó giải mã như khóa RSA với kích thước khóa 2048 bit.

Cuối cùng, theo ý kiến ​​​​của tôi, tất cả đều phụ thuộc vào hiệu suất. Nếu bạn định sử dụng các khóa RSA khổng lồ thì bạn sẽ không cần bất kỳ chương trình mã hóa nào khác; nhưng bạn sẽ phải trả giá đắt cho việc sử dụng băng thông và độ trễ.

Tất cả điều này giả định rằng bạn có kế hoạch tạo một khóa mới cho mỗi phiên. Mặt khác, nếu cuối cùng ai đó xác định được khóa bí mật của bạn, thì tất cả thông tin bạn đã gửi (và sẽ gửi) sẽ bị xâm phạm.

Bạn có thể chống lại điều đó bằng cách có kích thước khóa LỚN. Một lần nữa, đó là vấn đề hiệu suất.

Đă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.