- Là bản mã kết quả thực tế có thể giải mã được trong dù sao không có khóa riêng không?
Không, bạn sẽ cần khóa riêng. Không có giới hạn thực tế về số lần bạn có thể mã hóa bằng khóa công khai. Tôi sẽ đảm bảo rằng tính ngẫu nhiên trong phần đệm là ít nhất 128 bit. Cũng lưu ý rằng việc giải mã nhiều lần bằng khóa riêng làm cho thuật toán dễ bị tổn thương hơn trước các cuộc tấn công kênh bên [thường dựa vào số liệu thống kê]. Hơn nữa, nó không cho phép bạn bảo vệ khóa riêng bằng pin hoặc mật khẩu cho mỗi lần giải mã.
- Những yếu tố nào ảnh hưởng đến tốc độ mã hóa trong trường hợp này? Kích thước khóa RSA? Kích thước khối? Loại đệm?
Có, có và có.
Kích thước khóa RSA là vô cùng quan trọng vì kích thước khóa lớn hơn sẽ ảnh hưởng đến hiệu suất. Hơn nữa, kích thước khóa RSA phát triển rất nhanh nếu bạn yêu cầu sức mạnh quan trọng hơn. RSA-3072 đang cung cấp khoảng 128 bit bảo mật, nhưng bạn cần phải vượt quá 16kbit kích thước chính để đạt 256 bit. Và những loại hoạt động đó chắc chắn rất chậm, cụ thể là khi nói đến các hoạt động quan trọng riêng.
Kích thước khối được sử dụng cho bản rõ khác với mã cho bản mã [nghĩa là đầu vào luôn nhỏ hơn đầu ra] do các yêu cầu đệm. Kích thước khối cho bản rõ thường nhỏ hơn 11 so với kích thước khóa cho phần đệm PKCS#1 V1.5 kém an toàn và khác nhau bởi giá trị băm cho OAEP. Kích thước khối của bản mã giống hệt với kích thước của mô đun trong byte.
Loại đệm thường không có nhiều vấn đề khi nói đến tốc độ mã hóa. Các hoạt động khóa riêng của RSA là khá chậm và việc không biết sẽ không mất nhiều thời gian so với chúng. Tuy nhiên, việc tạo ra phần đệm phụ thuộc vào một trình tạo số ngẫu nhiên an toàn. Tạo số ngẫu nhiên có thể nhanh, nhưng nó cũng có thể chặn hoặc làm chậm hệ thống bằng các phương tiện khác.
Lưu ý rằng hiệu suất chỉ là một lý do tại sao mã hóa trực tiếp với RSA nên bị xa lánh. Việc mở rộng bản mã so với bản rõ là một lý do lớn khác. Và như đã chỉ ra, yêu cầu khóa riêng phải có sẵn cho các hoạt động hàng loạt có thể khiến nó gặp rủi ro.
Tôi đã sử dụng mô -đun pycrypto để mã hóa và giải mã với cặp và thuật toán khóa RSA. Vấn đề là khi tôi thử mã hóa các tệp lớn [10kb tệp văn bản], tôi lấy kích thước khối là 32 byte khi đọc tệp và mã hóa nó
>>> f = open['10kb','rb']
>>> p = open['enc','wb']
>>> while True:
data = f.read[32]
if not data:
break
enc_data = public_key.encrypt[data,32]
p.write[enc_data[0]]
p.close[]
f.close[]
Nó cho đầu ra:
128
128
.......and the many 128 blocks it is writing
Khi tôi cố gắng giải mã tệp được mã hóa, tôi cần đọc nó với khối 128 byte để trả lại các khối 32 byte,
>>> f = open['enc','rb']
>>> p = open['dec','wb']
>>> while True:
data = f.read[128]
if not data:
break
dec_data = private_key.decrypt[data]
p.write[dec_data]
p.close[]
f.close[]
Nó đang cho đầu ra:
32
32
.....so many 32 byte blocks it is decrypting, then
128
128
128
128
Traceback [most recent call last]:
File "", line 5, in
enc_data = private_key.decrypt[data]
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 174, in decrypt
return pubkey.pubkey.decrypt[self, ciphertext]
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/pubkey.py", line 93, in decrypt
plaintext=self._decrypt[ciphertext]
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 237, in _decrypt
cp = self.key._blind[ciphertext, r]
ValueError: Message too large
Đến mức xuất hiện kích thước khối là 32, nó đang giải mã đúng, nhưng nơi nó bắt đầu với 128, nó gây rối. Tại sao nó nói kích thước tin nhắn quá lớn? Có cách nào tốt hơn và nhanh để giải mã các tệp văn bản lớn bằng mô -đun pycrypto không?
Public key: [n=0x9a11485bccb9569410a848fb1afdf2a81b17c1fa9f9eb546fd1deb873b49b693a4edf20eb8362c085cd5b28ba109dbad2bd257a013f57f745402e245b0cc2d553c7b2b8dbba57ebda7f84cfb32b7d9c254f03dbd0188e4b8e40c47b64c1bd2572834b936ffc3da9953657ef8bee80c49c2c12933c8a34804a00eb4c81248e01f, e=0x10001]
----- Bắt đầu khóa công khai -----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCaEUhbzLlWlBCoSPsa/fKoGxfB
+p+etUb9HeuHO0m2k6Tt8g64NiwIXNWyi6EJ260r0legE/V/dFQC4kWwzC1VPHsr
jbulfr2n+Ez7MrfZwlTwPb0BiOS45AxHtkwb0lcoNLk2/8PamVNlfvi+6AxJwsEp
Private key: [n=0x9a11485bccb9569410a848fb1afdf2a81b17c1fa9f9eb546fd1deb873b49b693a4edf20eb8362c085cd5b28ba109dbad2bd257a013f57f745402e245b0cc2d553c7b2b8dbba57ebda7f84cfb32b7d9c254f03dbd0188e4b8e40c47b64c1bd2572834b936ffc3da9953657ef8bee80c49c2c12933c8a34804a00eb4c81248e01f, d=0x318ab12be3cf0d4a1b7921cead454fcc42ba070462639483394d6fb9529547827e9c8d23b294a8e01f8a1019da34e350f2307740e06a270bef1fe646e6ad213e31b528fdd5f5d03e633c07c44755ed622a629d79e822c095ebdf9cc80e517b5566dd3d3e5b16ec737987337a0e497fdba4b5ad97af41c1c3cdd87542a4637d81]
----- Bắt đầu khóa riêng RSA -----
MIICXAIBAAKBgQCaEUhbzLlWlBCoSPsa/fKoGxfB+p+etUb9HeuHO0m2k6Tt8g64
NiwIXNWyi6EJ260r0legE/V/dFQC4kWwzC1VPHsrjbulfr2n+Ez7MrfZwlTwPb0B
iOS45AxHtkwb0lcoNLk2/8PamVNlfvi+6AxJwsEpM8ijSASgDrTIEkjgHwIDAQAB
AoGAMYqxK+PPDUobeSHOrUVPzEK6BwRiY5SDOU1vuVKVR4J+nI0jspSo4B+KEBna
NONQ8jB3QOBqJwvvH+ZG5q0hPjG1KP3V9dA+YzwHxEdV7WIqYp156CLAlevfnMgO
UXtVZt09PlsW7HN5hzN6Dkl/26S1rZevQcHDzdh2QqRjfYECQQDGDUIQXlOiAcGo
d5YqAGpWe0wzJ0UypeqZcqS9MVe9OkjjopCkkYntifdN/1oG7S/1KUMtLoGHqntb
c428zOO/AkEAxyV0cmuJbFdfM0x2XhZ+ge/7putIx76RHDOjBpM6VQXpLEFj54kB
qGLAB7SXr7P4AFrEjfckJOp2YMI5BreboQJAb3EUZHt/WeDdJLutzpKPQ3x7oykM
wfQkbxXYZvD16u96BkT6WO/gCb6hXs05zj32x1/hgfHyRvGCGjKKZdtwpwJBAJ74
y0g7h+wwoxJ0S1k4Y6yeQikxUVwCSBxXLCCnjr0ohsaJPJMrz2L30YtVInFkHOlL
i/Q4AWZmtDDxWkx+bYECQG8e6bGoszuX5xjvhEBslIws9+nMzMuYBR8HvhLo58B5
N8dk3nIsLs3UncKLiiWubMAciU5jUxZoqWpRXXwECKE=
----- Kết thúc khóa riêng RSA -----
Encrypted: b'99b331c4e1c8f3fa227aacd57c85f38b7b7461574701b427758ee4f94b1e07d791ab70b55d672ff55dbe133ac0bea16fc23ea84636365f605a9b645e0861ee11d68a7550be8eb35e85a4bde6d73b0b956d000866425511c7920cdc8a3786a4f1cb1986a875373975e158d74e11ad751594de593a35de765fe329c0d3dfbbfedc'
Đã giải mã: B'A Tin nhắn cho mã hóa '