Điều gì nên được thay đổi trong lược đồ mà nó không nhạy cảm với độ tin cậy của văn bản bí mật?
Chà, Vadym đã đề cập rằng Chia sẻ Bí mật Shamir nên được thực hiện trong Trường hữu hạn; tuy nhiên nó không giải quyết câu hỏi của bạn.
Với Lược đồ của Shamir, một phiên bản đơn lẻ có thể chia sẻ bất kỳ giá trị nào giữa $0$ và $p^k - 1$ (ở đâu $p^k$ là kích thước của trường hữu hạn mà bạn sử dụng [1]). Và, với Shamir, không có sự khác biệt về bảo mật giữa các trường hữu hạn khác nhau, do đó chúng ta có thể chọn một trường dựa trên các mối quan tâm thực tế (ví dụ: số lượng bí mật bạn muốn có thể phát hành, kích thước của bí mật, mức độ dễ dàng thực hiện các phép toán trường hữu hạn khác nhau).
Tuy nhiên, những gì bạn muốn làm là chia sẻ mật khẩu làm bí mật; mật khẩu đó khá dài và có độ dài thay đổi. Vâng, có hai lựa chọn thay thế rõ ràng:
- Chọn một $p^k$ (hoặc nguyên tố $p$ nếu bạn đi với $k-1$) đủ lớn để chứa bất kỳ mật khẩu nào bạn muốn chia sẻ; ví dụ: nếu bạn sử dụng $p=2^{521}-1$ (là số nguyên tố), bạn có thể chia sẻ mật khẩu có độ dài tối đa 65 ký tự. Điều này hoạt động, tuy nhiên, nhược điểm là các giá trị lớn như vậy sẽ cần được xử lý bằng thư viện bignum. Nếu bạn đang sử dụng một ngôn ngữ có tích hợp thư viện bignum (ví dụ: Python), thì đây không phải là vấn đề - nếu không, có lẽ sẽ dễ dàng hơn với ý tưởng thứ hai.
Với ý tưởng này, nếu chúng ta có mật khẩu 'letmein' (0x6c 0x65 0x74 0x6d 0x65 0x69 0x6e trong ASCII), chúng ta có thể mã hóa nó thành số nguyên 0x6c65746d65696e = 30510848210725230.
- Chia nhỏ mật khẩu thành nhiều bí mật và chia sẻ riêng từng bí mật. Ví dụ: đối với mật khẩu gồm 14 ký tự, chúng tôi có thể chia mật khẩu đó thành 14 bí mật riêng biệt (với mỗi bí mật là một ký tự từ mật khẩu) và chia sẻ từng ký tự bằng cách sử dụng $p=257$ và $k=1$ (vì vậy mỗi bên sẽ nhận được tổng cộng 14 lượt chia sẻ, một lượt chia sẻ cho mỗi trong số 14 ký tự). Với ý tưởng này, sẽ an toàn khi sử dụng cùng một mã định danh cho tất cả các cổ phần mà một bên nhận được; tuy nhiên, điều quan trọng là mỗi bí mật được tạo bằng cách sử dụng tính ngẫu nhiên độc lập (nghĩa là mỗi trong số 14 đa thức ngẫu nhiên được tạo riêng).
Với ý tưởng này, chúng tôi sẽ mã hóa mật khẩu 'letmein' thành 8 bí mật độc lập 0x6c 0x65 0x74 0x6d 0x65 0x69 0x6e
Với ý tưởng thứ hai này, nếu bạn không muốn tiết lộ độ dài của bí mật, điều bạn có thể làm là luôn chia sẻ một số lượng bí mật cố định (đó sẽ là độ dài tối đa của mật khẩu bạn có thể chia sẻ, chẳng hạn như 32) và đối với mật khẩu ngắn hơn thế, hãy điền vào các ký tự bí mật bổ sung có giá trị không thể xuất hiện trong mật khẩu thực (ví dụ của tôi về $p=257$, giá trị rõ ràng để sử dụng sẽ là $256$).
[1]: Với mọi số nguyên tố $p$ và bất kỳ số nguyên nào $k$, có một trường kích thước hữu hạn $p^k$. Có lẽ bạn sẽ dễ dàng hơn khi bắt đầu sử dụng một trường có $k=1$ và $p$ một số nguyên tố có kích thước phù hợp - điều này làm cho các phép toán cộng, trừ và nhân gần hơn rất nhiều với các thuật toán tiêu chuẩn mà bạn quen thuộc (phép chia vẫn còn khó khăn).