Tôi hiện đang triển khai mã hóa dựa trên RSA đơn giản như sau trong PHP (sử dụng openssl_public_encrypt):
// $sRawText là chuỗi văn bản cần mã hóa.
// $sPublicKey là khóa công khai được lưu trữ trên máy chủ.
openssl_public_encrypt($sRawText, $sKết quả, $sPublicKey, OPENSSL_PKCS1_OAEP_PADDING);
// $sResult là kết quả được mã hóa sau đó được lưu trữ.
Tôi đảm bảo sử dụng tùy chọn đệm OAEP, tuy nhiên, việc đệm được thực hiện bằng SHA1 thay vì SHA256. PHP không có tùy chọn đệm tích hợp hỗ trợ SHA256. Ví dụ, thư viện mật mã của Python sử dụng SHA256 thay vì như sau:
từ cryptography.hazmat.primitives nhập tuần tự hóa
từ cryptography.hazmat.primitives nhập băm
từ phần đệm nhập cryptography.hazmat.primitives.asymmetric
ciphertext = public_key.encrypt(
thông điệp,
đệm.OAEP(
mgf=padding.MGF1(thuật toán=băm.SHA256()),
thuật toán = băm.SHA256(),
nhãn=Không có
)
)
Các tùy chọn duy nhất để tôi tải SHA256 trên PHP là sử dụng thư viện của bên thứ ba như PHPSecLib hoặc EasyRSA. Tôi đã gặp phải rào cản sau vài giờ cố gắng cài đặt và sử dụng một trong số chúng trên môi trường lưu trữ được chia sẻ của mình. (Sẽ thật lý tưởng nếu tôi có thể đặt một tệp .php chứa tất cả RSA ở một nơi.)
Dữ liệu được mã hóa vào cơ sở dữ liệu trên máy chủ trực tuyến và điều đó phải xảy ra trong PHP để tôi có thể chèn các mục nhập mới khi người dùng đăng ký (sử dụng khóa chung). Tôi muốn đảm bảo rằng nếu dữ liệu cơ sở dữ liệu được mã hóa và khóa công khai lọt vào tay những kẻ bất chính có quyền truy cập vào mức sức mạnh tính toán hợp lý, thì dữ liệu sẽ ở chế độ riêng tư (an toàn như một cuộc tấn công vũ phu). Dữ liệu trong tay kẻ xấu có thể bị lạm dụng để lừa đảo người dùng hoặc tạo ra các tuyên bố sai sự thật.
Lưu trữ phía máy khách không hoạt động vì dữ liệu hiện đã có trong cơ sở dữ liệu và tôi cần một số trường nhất định, chẳng hạn như thông tin liên hệ, để liên hệ với người dùng. Thêm vào đó, tôi cảm thấy rằng hầu hết khách hàng sẽ mất dữ liệu, dữ liệu này không thể khôi phục được và có khả năng vẫn còn khả dụng trong vài năm tới. Tuy nhiên, tôi không muốn hoàn toàn tin tưởng vào môi trường máy chủ, vì vậy tôi muốn giảm thiểu bề mặt tấn công chỉ vào những thời điểm cụ thể khi dữ liệu đang được sử dụng. Tôi dễ dàng giữ khóa cá nhân và chuyển cụm từ đó ở chế độ ngoại tuyến và an toàn hơn là cố gắng bảo mật một cơ sở dữ liệu động luôn thay đổi và cần được lưu trữ dự phòng.
Tôi dự định thực hiện tất cả các thao tác đối với dữ liệu được mã hóa ngoại tuyến và chỉ sử dụng các trường cơ sở dữ liệu được mã hóa để xác minh (tức là dữ liệu khớp với nội dung nào đó mà người dùng nhập) hoặc để đếm các mục nhập.Một số trường trong cơ sở dữ liệu không nhạy cảm, vì vậy chúng không được mã hóa và những trường khác như mật khẩu được băm.
Điều tôi muốn biết là, nếu tôi tiến hành triển khai đệm SHA1, loại tấn công nào sẽ giúp tôi chống lại kẻ thù có dữ liệu cơ sở dữ liệu được mã hóa và khóa chung. Làm thế nào họ sẽ đi về những cuộc tấn công? Phần đệm SHA256 có giúp bảo vệ dữ liệu tốt hơn không và bằng cách nào?
Cám ơn rất nhiều!