2015-05-15 69 views
0

我有一箇舊的系統,其數據庫的表具有char(20)類型的表,並且客戶決定爲某些業務需求加密該列,但是對於某些系統集成需要輸出列的長度類似於輸入是20,我已閱讀有關Format-Preserving encryptionSQL Server格式 - 保留加密

我的問題是,格式保留加密是否像AES方法一樣強大和是否還有任何SQL Server實現,可用於大量的記錄數百萬?

+1

與FPE的問題是,你不能告訴該字段是否被加密。它通常用於信用卡號碼,但是如果被盜用的是FPE版本,即使它不是原始號碼,它仍然可以是有效的信用卡號碼,因此被盜。 FPE和AES一樣強大,答案是肯定的,不是。 3字符字符串上的FPE將會是一個很差的加密,就好像你使用了300個字符的字符串,然後我很確定它會超過AES 256.但是這比生成AES要慢。 AES幾乎有穩定的速度,輸出不是人類可讀/可用的。 – Franck

+0

非常感謝您的回覆@Franck,我的情況是有20個字符進行加密,所以我認爲它很小,但我有興趣,如果你可以指導我關於碰撞的一部分,而不是評論,你可以有上述評論張貼爲回答 –

回答

0

您可以構建基於AES的安全的保留格式的加密。 Here是我對另一個問題的回答,其中顯示了使用AES作爲構建塊來實現保留格式的加密的代碼。有關如何完成的詳細信息,請參見斯坦福大學Boneh教授的格式保留加密this lecture

0

問題FPE是你不能告訴如果該字段已被加密或沒有。它通常用於信用卡號碼,但信用卡號碼的FPE版本如果被盜,即使它不是原始號碼,它仍然可以是有效的信用卡號碼並被惡意人員使用。

FPE強如AES答案是肯定否。對於3個字符的字符串,FPE將是一個非常差的加密,而不是如果您在300個字符的字符串上使用它,那麼它可能會超過AES 256。但是生成速度會比AES慢。 AES加密時幾乎有穩定的速度,你可以估計它將花費的時間取決於字符串的長度和輸出將是人類可讀/可用。未運行低谷真正的加密,但只是爲了說明差異

例子如下:

名稱:Frank Stall

加密使用FPE

名稱:Steve Moore

即使名字已經被成功加密,它仍然是一個有效的值,可以被想要竊取身份的人使用(請記住它只是爲了說明不同之處) 。從結果中,您可以直觀地看出該值是一個名字,但即使您知道它的名字,您也無法知道它是否已加密。

使用加密AES

名稱:WOa8+6KskFZ7IdNYgZ3+9BGDJrVfSVd61dDcX1JcVK8=

正如你可以看到,如果你看看一個基本的AES加密結果的字符串長度不匹配所需的值是不可能力所能及猜測它是。你怎麼知道這不是我的生日,而是我放在那裏而不是名字。