Chỉ cần thêm một số chi tiết để câu trả lời xuất sắc của kodlu:
Để chia sẻ một số dữ liệu bí mật bằng cách sử dụng Chia sẻ bí mật của Shamir trên trường hữu hạn $\mathrm{GF}(k)$, trước tiên bạn cần mã hóa dữ liệu đó dưới dạng $m ⥠1$ các phần tử của trường (được biểu diễn tự nhiên dưới dạng các số nguyên từ $0$ đến $k-1$) và cũng chỉ định từng chia sẻ mà bạn muốn tạo một phần tử khác 0 riêng biệt của trường dưới dạng ID chia sẻ (tức là $x$ tọa độ tại đó đa thức tạo chia sẻ được đánh giá để tạo ra chia sẻ đó).
Sau đó, bạn áp dụng quy trình tạo chia sẻ, quy trình này sẽ cung cấp cho bạn một số chia sẻ, mỗi chia sẻ bao gồm $m$ các yếu tố của trường $\mathrm{GF}(k)$ (cộng với ID chia sẻ). Bằng cách xây dựng, các cổ phiếu này được phân phối đồng đều và $t-1$ khôn ngoan độc lập, đâu $t$ là tham số ngưỡng tái cấu trúc của sơ đồ, nghĩa là bất kỳ tập hợp con nào của $s < t$ của cổ phiếu không thể phân biệt được với $s$ trình tự của $m$ các phần tử trường được chọn một cách độc lập thống nhất một cách ngẫu nhiên. Đặc biệt, như một hệ quả tất yếu của điều này, tất cả các yếu tố trường bao gồm các cổ phần nhất thiết phải được phân phối đồng đều giữa $0$ và $k-1$, bao gồm.
Bây giờ, giả sử rằng dữ liệu bí mật mà bạn muốn chia sẻ là dữ liệu nhị phân và được mã hóa thành một chuỗi $n$ chút ít. Nếu bạn tình cờ sử dụng trường nhị phân, sao cho $k = 2^b$ (và nếu $n$ là bội số của $b$), sau đó ánh xạ bí mật thành một chuỗi các phần tử trường rất đơn giản: chỉ cần cắt $n$-bit chuỗi vào $m = \frac nb$ miếng $b$ bit, mỗi bit ánh xạ tự nhiên tới một phần tử trường. Và vì mọi phần tử của $\mathrm{GF}(2^b)$ cũng ánh xạ rõ ràng tới một chuỗi $b$ bit, chia sẻ của bạn cũng có thể được biểu diễn dưới dạng $n$-bit chuỗi bit (cộng với ID chia sẻ) chỉ bằng cách ghép nối (các biểu diễn nhị phân của) các phần tử trường trong mỗi chia sẻ.
(Nếu độ dài dữ liệu $n$ là biến và không nhất thiết phải là bội số nguyên của $b$, bạn có thể cần phải áp dụng một số đệm để chỉ ra rõ ràng độ dài của nó trước khi chia sẻ nó, nhưng đó vẫn chỉ là một sự phức tạp nhỏ. Và nếu dữ liệu của bạn được mã hóa dưới dạng byte 8 bit và bạn không cần nhiều hơn 255 lượt chia sẻ thì bạn chỉ cần sử dụng $\mathrm{GF}(2^8)$ và bỏ qua phần đệm.)
Điều gì sẽ xảy ra nếu bạn đừng Tuy nhiên, bạn muốn sử dụng trường nhị phân? Sau đó, bạn có một vài lựa chọn:
Chọn cái lớn nhất $b$ như vậy mà $2^b < k$, chia dữ liệu thành $b$các mảnh -bit, ánh xạ chúng thành các phần tử trường và chia sẻ chúng. Nhược điểm chính của điều này là các yếu tố trường ngẫu nhiên trong cổ phiếu sẽ không phải phù hợp với $b$ bit (kể từ $2^b < k$), vì vậy bạn sẽ cần mã hóa chúng bằng cách sử dụng $b+1$ mỗi bit, lãng phí ít nhất $m$ bit trên mỗi cổ phần. (Mã hóa độ dài thay đổi sau khi chia sẻ sẽ không hữu ích ở đây vì bạn không thể nén dữ liệu ngẫu nhiên thống nhất. Mã hóa độ dài thay đổi trước chia sẻ không an toàn, vì khi đó thời lượng chia sẻ của bạn sẽ làm rò rỉ thông tin về bí mật.)
Bạn cũng không thể sắp xếp cả hai $b$ và $b+1$ trở thành các giá trị "làm tròn" thuận tiện như 8, 16, 32, 64, 128 hoặc 256, điều đó có nghĩa là các phần dữ liệu hoặc phần chia sẻ của bạn chắc chắn sẽ có độ dài khó xử. Ví dụ: giả sử bạn muốn chia sẻ khóa mã hóa 256 bit; bạn có thể chọn $b = 256$, trong trường hợp đó, phần chia sẻ của bạn sẽ dài 257 bit (và, nếu bạn muốn sử dụng trường nguyên tố, bạn cần thực hiện phép tính modulo một số nguyên tố 257 bit) hoặc $b = 255$, trong trường hợp đó, bạn cần chia khóa của mình thành hai phần tử trường, dẫn đến chia sẻ 512 bit. Hoặc bạn có thể sử dụng, nói, $b = 32$ (và, giả sử, trường nguyên tố $\mathrm{GF}(2^{32}+15)$, điều này hơi khó xử khi sử dụng số học 64 bit, nhưng không phải là không thể, đặc biệt nếu bạn không cần thực thi thời gian liên tục) và kết thúc bằng $33 \times 8 = 264$ chia sẻ bit sau khi xáo trộn một số bit, đây có thể là một nền tảng trung gian tốt.
Sử dụng chuyển đổi cơ số chung từ nhị phân sang cơ số $k$ để mã hóa dữ liệu của bạn một cách tối ưu (nghĩa là diễn giải $n$-bit dữ liệu nhị phân dưới dạng số từ $0$ đến $2^n-1$, sau đó biểu thị số đó trong cơ số $k$) và chuyển đổi cơ số nghịch đảo từ cơ số $k$ để chuyển đổi cổ phiếu trở lại nhị phân. Bạn vẫn sẽ lãng phí một số bit, vì vậy lượt chia sẻ của bạn sẽ dài hơn dữ liệu, nhưng chỉ bằng một lượng không đổi. Mặt trái là việc chuyển đổi cơ số chậm hơn và phức tạp hơn để thực hiện so với việc xáo trộn bit đơn giản. Ngoài ra, bạn gần như chắc chắn sẽ cần một số loại sơ đồ đệm nếu độ dài bí mật của bạn không cố định. (Và đảm bảo luôn sử dụng $m = \lceil n \log_k 2 \rceil$, ngay cả khi giá trị bí mật của bạn phù hợp với ít cơ sở hơn $k$ chữ số, để tránh thông tin rò rỉ độ dài chia sẻ về bí mật.)
Bây giờ, không có biến chứng nào trong số này là không thể vượt qua, nhưng chúng làm làm phức tạp việc triển khai và làm cho mã hóa chia sẻ kém hiệu quả hơn. Để so sánh, ngay cả khi bạn phải thực hiện $\mathrm{GF}(2^b)$ số học từ đầu, sử dụng trường nhị phân vẫn đơn giản hơn.