Điểm:2

Định dạng bảo toàn hàm băm

lá cờ in

Chúng tôi có trường hợp sử dụng mã hóa thông tin thẻ tín dụng và trả lại giá trị mã hóa sau khi giữ nguyên định dạng.

Lý tưởng nhất là đây phải là một chiều và tuân theo FPE có thể không phải là giải pháp tốt nhất. Xin đề nghị giải pháp tốt nhất có thể được cung cấp ở đây.

Điểm:9
lá cờ ng

Số thẻ tín dụng tiêu chuẩn có entropy giới hạn. Mỗi ISO/IEC 7812 6 chữ số đầu tiên được cố định cho một nhà phát hành thẻ nhất định và giả định thận trọng đơn giản nhất là những kẻ tấn công đã biết chúng. Chữ số cuối cùng là một chức năng công cộng của những người khác. Đối với số thẻ tín dụng gồm 16 chữ số, số đó để lại 9 chữ số (tốt nhất là <30 bit entropy). Điều này chỉ có thể tăng lên một chút (như 5 bit) bằng cách sử dụng ngày hết hạn.

Điều này ngụ ý rằng chúng ta không thể sử dụng hàm nhanh và công khai (như hàm băm, trừ khi có quy định khác) và nhận được tính một chiều mong muốn. Và rằng bất kỳ chức năng công khai chậm chạp nào cũng sẽ có mức độ bảo mật hạn chế. Hơn nữa, kích thước quá nhỏ đối với mật mã khóa công khai.

Tôi kết luận rằng chúng ta chỉ có thể sử dụng mật mã khóa bí mật, đối xứng. Mã hóa bảo toàn định dạng đi vắng. Chúng tôi cũng có thể sử dụng một định dạng lại Mã xác thực tin nhắn, nhưng chúng ta phải sợ xung đột và nó sẽ đảm bảo tính toàn vẹn kém mạnh mẽ hơn một chút so với FPE.


Mỗi yêu cầu trong bình luận, Tôi sẽ trình bày chi tiết một MAC được định dạng lại. Tôi cho rằng đầu ra phải là 16 chữ số thập phân, không có ràng buộc nào khác. Điều này ngụ ý rằng chúng tôi sẵn sàng chấp nhận một số xác suất va chạm thấp: vì $n$ số thẻ mà xác suất sẽ được giới hạn trên bởi $n\,(n-1)/(2\cdot10^{16})$; xem cái này. Ví dụ: chúng tôi phải hài lòng với độ tin cậy 99% không có xung đột giữa tối đa 14 triệu số thẻ (được chọn mà không cần biết về khóa).

  • Giả sử một khóa bí mật cố định với entropy ít nhất 128 bit
  • tính toán HMAC-SHA-256 của số thẻ tín dụng và khóa, với Kích thước đầu ra = 32 byte
  • Coi đầu ra là một số nguyên trong $[0,2^{256})$ (theo quy ước big-endian), giảm nó modulo $10^{16}$và biểu thị kết quả dưới dạng 16 chữ số thập phân (với các số 0 đứng đầu nếu cần thiết), tạo thành mã thông báo.

Về cơ bản, không thể đảo ngược mã thông báo đó nếu không có quyền truy cập vào khóa hoặc thiết bị có khóa; nhưng điều đó có thể thực hiện được với nỗ lực chính và vừa phải, bằng cách thử và sai trên số thẻ tín dụng.

Ngoài ra, nếu chúng tôi muốn làm cho việc đảo ngược một cái bằng phím hơi khó khăn hơn, chúng tôi có thể thay thế HMAC-SHA-256 bằng Argon2 (số thẻ tín dụng được cung cấp dưới dạng mật khẩu, khóa dưới dạng khóa, muối cố định, chiều dài thẻ = 32 byte), được tham số hóa để làm chậm mọi thứ ở mức có thể chấp nhận được. Điều đó không làm thay đổi xác suất va chạm, nhưng tính bảo mật được cải thiện: giả sử Argon2 được tham số hóa trong 0,1 giây thời gian tính toán của một PC nhất định; kẻ tấn công có 100 PC tương tự; 9 chữ số của số thẻ tín dụng là hoàn toàn ngẫu nhiên, 6 chữ số đã biết và chữ số cuối cùng là tổng kiểm tra thông thường; sau đó sẽ cần trung bình một triệu giây (11,6 ngày) để đảo ngược một hàm băm nhất định hoặc 1 giây để đảo ngược một hàm băm trong số một triệu hàm băm đã cho.


Nếu chúng tôi không thể sống chung với rủi ro va chạm, chúng tôi phải sử dụng Mã hóa bảo toàn định dạng thực sự, nhưng chúng tôi gặp khó khăn trong việc đảo ngược cho một người giữ khóa. FPE khó tính toán hơn đáng kể theo hướng ngược lại không phải là tiêu chuẩn, nhưng có thể hiểu được, hãy xem phần này câu hỏi.

user3336696 avatar
lá cờ in
Những cách tốt nhất bạn đề xuất cho MAC được định dạng lại là gì. Bất kỳ gợi ý nào về cách bạn sử dụng FPE tốt nhất. Ngoài ra, tôi có ý tưởng kỳ lạ này, lấy văn bản, thực hiện Băm, chuyển đổi thành số thập phân và chọn các chữ số ngẫu nhiên sau khi xác minh xung đột, ý kiến ​​​​của bạn về điều này là gì. Đánh giá cao đề xuất của bạn
lá cờ ar
@ user3336696: Nếu bạn có thể "xác minh xung đột", điều đó có nghĩa là bạn phải có cơ sở dữ liệu về tất cả các số thẻ được mã hóa ở đâu đó. Nếu cơ sở dữ liệu cũng bao gồm số thẻ ban đầu (hoặc hàm băm chống va chạm của chúng), thì bạn chỉ cần gán một mã thông báo ngẫu nhiên duy nhất cho mỗi số thẻ và vấn đề trở nên tầm thường (ngoại trừ việc giữ an toàn cho cơ sở dữ liệu!).Nếu không, làm cách nào để bạn xác minh xem va chạm rõ ràng là va chạm thực sự giữa hai số thẻ khác nhau hay chỉ cùng một số thẻ được mã hóa hai lần?

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