Điểm:9

Việc mã hóa từng số riêng biệt bằng RSA có an toàn không?

lá cờ us

Giả sử RSA được coi là phương pháp "an toàn" để mã hóa. RSA có nghĩa là để mã hóa một chuỗi các số nguyên cơ sở $27$. Nếu chúng ta sử dụng một $n=pq$ điều đó thật khó để xác định, Có còn an toàn không nếu chúng ta mã hóa riêng từng số nguyên (chữ cái) thay vì toàn bộ cụm từ một lần?

Chỉnh sửa: Tôi không mong đợi nhận được câu trả lời tuyệt vời như vậy. Cảm ơn mọi người!

lá cờ cn
Trên thực tế, đây là một lỗi phổ biến của người mới bắt đầu, đến nỗi việc phá vỡ nó là một trong những thử thách cấp độ dễ kinh điển mà bạn có thể tìm thấy trong CTF hoặc các khóa học giới thiệu.
Jonas avatar
lá cờ cm
https://xkcd.com/257/ là một truyện tranh cho thấy một ví dụ hay
Điểm:17
lá cờ se

Sách giáo khoa / RSA thuần túy không nên được sử dụng để mã hóa tin nhắn trực tiếp. Điều này là do bản mã được xác định dựa trên thông báo. Đưa ra một bản mã bị nghe trộm $c_i$. Một cuộc tấn công hiệu quả chống lại kế hoạch của bạn sẽ là:

  1. Lấy bản mã $c_0, ..., c_{26}$ bằng cách mã hóa các số nguyên 0-26 bằng mô đun công khai $n$ và số mũ $e$.
  2. $j$ trong [0,26], kiểm tra xem $c_i=c_j$. Nếu chúng ta tìm thấy một $j$, thì tin nhắn ban đầu của bạn là $j$.
Điểm:7
lá cờ ar

Với phần đệm thích hợp (chẳng hạn như OAEP), việc sử dụng RSA để mã hóa từng byte hoặc ký tự hoặc thậm chí cả bit thực sự an toàn*. Tất nhiên, điều đó cũng vô cùng lãng phí, vì bạn đang biến cứ 8 bit của văn bản gốc thành thứ gì đó như 2048 hoặc nhiều bit hơn của bản mã và tiêu tốn rất nhiều thời gian của CPU trong quá trình này, nhưng sự kém hiệu quả không (thường) là vấn đề bảo mật.

Không có đệm, tuy nhiên, sử dụng RSA để mã hóa một trong hai các ký tự đơn hoặc tin nhắn ngắn không an toàn, vì mã hóa "sách giáo khoa RSA" như vậy dễ bị tấn công trước một số cuộc tấn công cho phép giải mã tin nhắn mà không cần khóa riêng. Một số cuộc tấn công này bao gồm:

  • Tấn công phỏng đoán: tạo ra một danh sách gồm vài trăm (hoặc vài nghìn tỷ) bản rõ hợp lý hơn hoặc ít hơn và mã hóa từng bản rõ bằng khóa công khai. Kiểm tra xem kết quả có khớp với thông điệp bạn muốn giải mã hay không. Nếu có, bạn vừa tìm thấy bản rõ chính xác.

    Cuộc tấn công này sẽ phá vỡ hoàn toàn bất kỳ sơ đồ nào sử dụng RSA trong sách giáo khoa để mã hóa các ký tự hoặc byte đơn lẻ, vì thật dễ dàng mã hóa từng ký tự hoặc byte đơn lẻ bằng khóa chung và do đó có được một từ điển hoàn chỉnh của tất cả các bản mã có thể. Nhưng nó cũng hoạt động bất cứ khi nào không gian bản rõ đủ nhỏ (hoặc kẻ tấn công có thể đoán rằng bản rõ có khả năng thuộc về một số tập hợp đủ nhỏ) để có thể liệt kê trên một máy tính (hoặc một cụm máy tính).

  • Các $e$-cuộc tấn công gốc: Nếu mô-đun công khai $e$ nhỏ (chẳng hạn như $e = 3$) và bản rõ $m$ (sau khi được mã hóa dưới dạng số) cũng đủ nhỏ để $m^e < n$, thì mã hóa RSA trong sách giáo khoa có thể bị đánh bại chỉ bằng cách tính toán $e$-gốc thứ của bản mã $c = m^e \bmod n$. Các biến thể của cuộc tấn công này cũng có thể được thực hiện để hoạt động nếu $m^e < kn$ cho một số nguyên nhỏ $k$ (giả sử, ít hơn một nghìn tỷ), chỉ đơn giản bằng cách kiểm tra vũ lực nếu $e$-gốc thứ của $c + jn$ là một số nguyên cho tất cả $j$ từ $0$ lên đến $k$. Mặc dù cuộc tấn công này rất dễ tránh (ví dụ:bằng cách sử dụng phần đệm mã hóa phù hợp và/hoặc bằng cách sử dụng số mũ công khai lớn hơn, như số mũ chung $e = 2^{16} + 1 = 65537$), đáng ngạc nhiên là nhiều kế hoạch RSA ngây thơ do những người nghiệp dư nghĩ ra (hoặc được thiết kế để cố tình phá vỡ, chẳng hạn như trong CTF) có thể rơi vào bẫy.


*) Theo nghĩa cung cấp tính bảo mật và bảo mật ngữ nghĩa chống lại kẻ tấn công nghe trộm thụ động, giả định rằng khóa RSA được tạo đúng cách và đủ dài để chống lại các cuộc tấn công bao thanh toán, rằng trình tạo số ngẫu nhiên được sử dụng cho OAEP không bị xâm phạm và không có lỗi triển khai rõ ràng nào khác được thực hiện, và rằng sự tồn tại và độ dài của tin nhắn không được bảo mật. Ngay cả khi đó, bất kỳ sơ đồ kiểu "ECB" nào mã hóa văn bản một ký tự tại một thời điểm tất nhiên là rất dễ uốn nắn và do đó dễ bị thao túng bởi kẻ tấn công đang hoạt động.

lá cờ mg
Tôi chỉ đơn giản là trong tình yêu với chú thích đó.
Điểm:6
lá cờ cn
Ray

Nếu mỗi ký tự được mã hóa độc lập, thì mỗi khi ký tự 'a' xuất hiện trong bản rõ, nó sẽ ánh xạ tới cùng một mã thông báo duy nhất có độ dài bất kỳ (ví dụ: 0x157a05c8). Và ngược lại, bất cứ khi nào bạn nhìn thấy 0x157a05c8 trong bản mã, nó phải ánh xạ tới 'a' trong bản rõ. Cuối cùng, bất kể mã thông báo đầu ra dài bao nhiêu, nếu đầu vào được mã hóa một byte (8 bit) tại một thời điểm, thì chỉ có 256 mã thông báo đầu ra có thể có, giống như số lượng mã thông báo đầu vào có thể có.

Đó không còn là RSA nữa. nó là một mật mã thay thếvà chúng có thể bị phá vỡ một cách tầm thường bằng một số kỹ thuật đơn giản. Bạn không sử dụng RSA làm thuật toán mã hóa, mà là một chức năng phái sinh chính. Nhưng điều đó không làm cho bản thân mật mã thay thế mạnh hơn.

Điểm:6
lá cờ in

Mặc dù RSA không dùng để mã hóa nhưng người ta có thể sử dụng RSA để mã hóa. Nếu một người sử dụng TextBook RSA thì nó sẽ không an toàn vì mã hóa miễn phí nên bất kỳ kẻ tấn công nào cũng có thể kiểm tra các giá trị. Chúng tôi gọi đây là tiên tri mã hóa và nó miễn phí trên các hệ thống khóa công khai


đơn giản tiên tri mã hóa RSA trò chơi...

def Ind_CPA_RSA(đối thủ, mục tiêu):
    (e,n,d,...) = generate_RSA_key() // phần keygen

    def RSA_encryption_oracle_PKCS#1_v1.5(plaintext): // Tiên tri mã hóa
        EM = PKCS#1_v1.5_padding(bản rõ)
        bản mã = ​​EM^e mod n
        trả lại bản mã

    cho mỗi m trong thể_message_space: //queries
        c = RSA_encryption_oracle_PKCS#1_v1.5(m)
        nếu c == mục tiêu
            mục tiêu in)
            trở lại thành công
    thất bại trở lại

Vì vậy, đối thủ cố gắng bằng mọi cách có thể, miễn là có thể, để thấy sự bình đẳng để giành chiến thắng.

Trong sách giáo khoa RSA nếu số mũ công khai $e=3$ sau đó tấn công căn bậc ba hoạt động cho tất cả các tin nhắn như vậy $len(m) < \sqrt[3]{n}$.

Đối với tất cả các cuộc tấn công khác, bài báo của Dan Boneh là một điểm khởi đầu tốt;


$$\textbf{Không bao giờ sử dụng RSA Sách giáo khoa miễn là bạn biết mình làm gì!}$$


Để được an toàn, người ta phải sử dụng mã hóa RSA với các phần đệm thích hợp PKCS#1 v1.5 (RSAES-PKCS1-v1_5) hoặc OAEP (RSAES-OAEP) đệm. Các phần đệm này thêm ngẫu nhiên để đạt được mã hóa xác suất.

Mỗi người sử dụng các mã hóa đặc biệt để đạt được điều này như phần đệm PKCS#1 v1.5;

EM = 0x00 || 0x02 || Tái bút || 0x00 || m.

m là tin nhắn. Các Tái bút bao gồm phần ngẫu nhiên

Tạo xâu bộ tám PS độ dài k - mLen - 3 bao gồm các octet khác không được tạo giả ngẫu nhiên. Độ dài của PS sẽ ít nhất là tám octet.

Ví dụ cho RSA 2048-bit; $k = 256$, $mLen=4$ sau đó Tái bút độ dài là 249 byte ngẫu nhiên cho một tin nhắn có kích thước bằng chữ cái. Do đó, kẻ tấn công không thể kiểm tra các giá trị bằng tiên tri mã hóa. Phần còn lại tấn công vấn đề RSA.

Tương tự, OAEP có tính ngẫu nhiên và OAEP đã được chứng minh là có bảo mật IND-CCA1. Thích OAEP hơn PKCS#1 v1.5 vì nó có nhiều cuộc tấn công do triển khai không đúng cách.


Nếu bất cứ ai muốn có một bài viết học thuật về số liệu mã hóa RSA thì đây là bài viết có tường phí;

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