如何使用“擦除編碼”求解線性方程組以恢復原始文件?
以下文章解釋了擦除編碼的簡化版本:
這是食譜:
- 取一個大小為 M 的文件。
- 將文件分成 k 個塊,每個塊的大小相同 M/k。
- 現在,對這 k 個塊應用 (n, k) 程式碼以獲得 n 個塊,每個塊的大小都相同 M/k。
- 現在有效尺寸為 nM/k。因此文件被擴展 n/k 次。我們需要 n 大於或等於 k,所以 n/k 至少為 1。如果 n 等於 k,則您剛剛拆分文件並且沒有執行任何編碼。
- n 個塊中的任何 k 個塊都可用於取回文件。
所以這也意味著程式碼可以容忍多達 (n - k) 次擦除。下圖顯示了 (4, 2) 程式碼遵循此配方。
無需真正想知道如何實際添加文件,以下範例說明了設計 (4, 2) 程式碼的一種特殊情況。
假設您有四台電腦(也稱為節點)可用於儲存文件。與其將所有雞蛋放在同一個籃子中,不如將其散開,在這種情況下,通過執行以下操作將文件儲存兩次:
其中 X1 是文件 A 的第一個塊,X2 是第二個。另一種方法是儲存編碼塊:
現在,如果您失去節點 1 和 3,在儲存未編碼塊的情況下,X1 將永久失去,因此文件 A 被損壞。而在儲存編碼塊的情況下,即使這兩個節點發生故障,也可以從 A2 和 A4 恢復 X1 和 X2,從而恢復 A。這是因為
A2 = X2
和A4 = X1 + 2*X2
。所以**可以解這些方程並得到 X1 和 X2!**整潔,不是嗎?我的問題與最後一句話有關:
如何求解這些方程並取回 X1 和 X2 ?
我們有兩個方程:
(1) A2 = X2 (2) A4 = X1 + 2*X2
AFAIK:如果方程的數量等於****或大於未知變數的數量,我們就能夠求解方程。
基於此:
- 在上述兩個方程中,哪些是已知的,哪些是未知的?A2 和 A4未知?還是X1 和 X2未知?
- 如果 X1 和 X2已知,那麼我們甚至可以通過一個方程找到 A4 和 A2。所以,我們不需要兩個!
- 如果 X1 和 X2未知,則將根據 A2 和 A4 找到它們。在這種情況下,如何通過兩個編碼值 A2 和 A4 恢復原始文件?
如何求解這個線性方程組?
我不清楚哪個是已知的,哪個是未知的:
A2 和 A4 未知?
或者
X1 和 X2 未知?
原始數據是 $ X_1 $ 和 $ X_2 $ . 股份是
$$ \begin{align*} A_1 &= X_1, \ A_2 &= X_2, \ A_3 &= X_1 + X_2 \ A_4 &= X_1 + 2 X_2. \end{align*} $$
您儲存共享 $ A_1 $ , $ A_2 $ , $ A_3 $ , 和 $ A_4 $ 在磁碟上,或通過網際網路和山丘上的其他人的磁碟,或埋在某處的樹中保管。如果森林大火燒毀了樹木並且其他人的房子在洪水中被沖走(或者,如果惡意儲存伺服器試圖修改其中一個共享並且您檢測到它,因為您正在使用加密技術並將修改後的共享丟棄) ,但你仍然有四股中的兩股,比如說 $ A_2 $ 和 $ A_4 $ , 你可以恢復
$$ \begin{align*} X_2 &= A_2, \ X_1 &= A_4 - 2 A_2, \end{align*} $$
並獲取您的原始文件 $ X_1 \mathbin| X_2 $ 背部。