我可以使用什麼加密協議或算法為每個使用者加密/解密數據庫表的列子集?
我可以使用什麼加密協議或算法為每個使用者加密/解密數據庫表的列子集?
例如,假設我有一個包含 50 列的數據庫表
col1, col2, col3, col4......col50
現在我想揭示這樣的數據
user1 can see (have access to) col15 and col17 only at time t1 and user2 can see (have access to) col7, col9 and col20 only at time t1 user3 and user4 can both see data only in col40 at time t1. user1 can see (have access to) col24 only (which means access to previously assigned col15 and col17 will be disabled) at time t2 user1 can have access to additional column say col 42 at time t3. so At time t3 user1 has access to both col24 and col42
我正在考慮是否可以向使用者頒發令牌,以便每個令牌都可以訪問數據庫表中的一組列或類似的東西。
我可以使用什麼樣的有效協議或算法來建構這樣的方案?
我的可擴展性要求
我最多可能有 1000 列(最大)我可以擁有數百萬或數十億使用者。可以擴展到數百萬的算法也可以
使用基於屬性的加密的解決方案
您可以使用基於屬性的加密(ABE;cf.
$$ 1 $$)。例如,使用密文策略 ABE,您可以執行以下操作。令 {col1, col2, …, col50} 為屬性域,並為每個使用者分配一個與她被允許訪問的屬性相關的鍵。以您的範例為例,user1 將獲得與 {col15, col17} 相關的密鑰。然後根據其列屬性對每一列進行加密,以便擁有具有相應屬性的密鑰的每個使用者都可以解密該列。 替代解決方案
由於您要加密的列數似乎相當少,您還可以使用稱為混合加密的替代方法:您選擇對稱加密方案並在單獨的密鑰下加密每一列。此外,您使用非對稱加密方案,該方案用於為有權訪問特定列的使用者加密各自的對稱密鑰。讓 $ k_1, \dots, k_{50} $ 是用於加密第 1 列到第 50 列的對稱密鑰,然後 - 再次以你的例子 - 你將加密 $ k_{15} $ 和 $ k_{17} $ 在使用者 1 的非對稱加密方案的公共加密密鑰下。
可擴展性要求
由於列數相對較少(< 1000),我認為上述兩種解決方案都應該表現良好。請注意,對於第二種解決方案,交給使用者的密文的大小在列數上是線性大小。使用 ABE 方法,您將能夠獲得恆定大小的密文(取決於使用的 ABE),但這將以更昂貴的加密和解密為代價。因此,選擇這兩種方法中的一種可以被視為在密文大小和效率之間進行權衡。
參考
$$ 1 $$ 什麼是基於屬性的加密?