我們有軟件在寫入數據庫時加密我們數據庫中的一些數據(如信用卡號碼,社會安全號碼等)(並在閱讀時再次對其解密)。從密鑰,種子,明文和密文確定加密算法
我們希望能夠在我們自己的軟件之外解密該數據以外的。
從分析數據,這是我發現:
var adminSoftwareUserName = "Admin";
var adminSoftwarePassword = "Password1";
var adminDatabaseUserID = "41646d696e"; // toHex("Admin")
var adminDatabasePassword = "0600ba25691008d870a958e99901048351281bf900"; // "06" + sha1("Admin:Password1").Truncate(-2) + "00"; weird, I know.
var seedValue = 5652653467996391684;
var adminMasterEncKey = "AQAj777KYvlNJ45LtB5DD1iOAOzLno5rdWTblRGYI8YWbXZ+75A=nNTLd6+81GoCnHsQYcisrprtBQyNRhDjKzScw7MpQBIsIpHseaQ8jq2pwvqfQ/DS1GxwQ2FV7N0/yTP/Qz5tuao+GsIpCBihXcdDJqQy4rTT+EEZQaYEgikRmGhZPSHw0HEJMnDHO1tkOsgtSDfrnecJ5HSGDN6/huVpEvCgWPl0HFtzTsD6zWYNGc70A9lH";
var ccNumEncKey = "AQAj777KsPF4Pc1SD0KyRthi7gXDhMz+BhGGmPvSjXAo8bwiJW0=qCqpVK/tmWyNd3q2faSOTlZC1Nn33DUfrv/kSnbFi9/QjAjZ+lF02//MWLpNZ0XGhV62tvCURBJFssgGlL6d2m4pKINX05TOEOzweQmCMS9Bgtl6E7FEw7U1BxjV4h1xKG5ZoSpiKY5ZQvCvmnEtRU5SrnbA+kYtPjR+rTMAEASnwbrWc0u1I4KbRBv+KXfe";
var plaintextCcNumber = "test";
// | base64 here |
var encryptedCcNumber = "AQAj777KFma5vZ9Bb1sX8+MFpkqa473IFWRShg+pKNmKwrm7BPg=zbDc68fp0zceSvevnNuG2g==";
每當我更改管理員密碼,這兩個鍵更新,因爲是密文。種子不是的變化。
相同的明文值總是加密爲相同的密文(只要密碼/密鑰未更新)。
加密的CcNumber有一個base64編碼部分。
密鑰和密文始終以「AQAj777K」開頭,即使密碼/密鑰更新後也是如此。
從軟件製造商的狀態的文檔的以下內容:
軟件符合要求持卡人信息使用標準算法和加密密鑰長度來加密PCI安全標準。
當您創建的管理員用戶與其他用戶帳戶,該軟件生成的信息三個部分是用來保護信用卡信息:
- 一個數據訪問關鍵:這是一個128 AES加密密鑰用於加密信用卡號碼。
- A 每個用戶主密鑰:這是爲每個用戶生成的128位AES加密密鑰。主密鑰加密數據訪問密鑰和用戶有權訪問的任何其他加密密鑰的副本。
- A 密碼派生密鑰:這是使用種子值和每個用戶的密碼生成的128位AES密鑰。密碼派生密鑰用於保護每個用戶的主密鑰副本。
軟件在管理員用戶設置和管理員創建其他用戶帳戶時創建這些密鑰。管理員的主密鑰用於管理其他用戶的主密鑰以及他們有權訪問的每個用戶的數據訪問密鑰副本。
我的問題:從所提供的信息,對加密/解密的方法容易被猜到的?
Mods:如果您認爲這更適合http://crypto.stackexchange.com/請移動它! :-) –
對adminDatabasePassword的評論看起來不正確; sha1(「Admin:Password1」)是778e46b181151e5d4a52043c6034af5c29b97a9b。 – erickson
@DavidMurdoch AFAIK,「猜密碼」的問題[不完全歡迎加密](http://meta.crypto.stackexchange.com/questions/100/do-we-want-challenge-analyse-this-questions-和如果那麼什麼約束-IF-任何)。 –