在 Linux中,可以使用GPG,Openssl enc來實現(xiàn)對稱加密。對于前者來說,在RedHat linux中 執(zhí)行“gpg-a --cipher-algo TWOFISH--outfile bankinfo.2f -c bankinfo.txt”命令,可以使用“TWOFISH”加密算法,對“bankibfo.txt”的文件進行加密,輸入密碼后,得到的名為“bankinfo.2f”的加密文件。初次使用時,系統(tǒng)會提示“/root/.gnupg”等文件不存在,并自動創(chuàng)建這些文件。
進入“.gnupg”目錄后,可以看到其中的“pubring.gpg”和“secrig.gpg”就是密鑰數(shù)據(jù)庫文件,分別存放和公鑰和私鑰相關(guān)的內(nèi)容。這里使用的是對稱加密,所以這兩個文件的大小為零?!?-cipher-algo”參數(shù)說明使用的加密算法。執(zhí)行“gpg--versiom”命令,在幫助信息中的“Cipher”欄中顯示所有可用的加密算法,包括3DES、CAST5、BLOWFISH、AES、AES192、AES256、TWOFISH等。解密時,可以執(zhí)行“gpg--output bankinfo.txt -d bankibfo.2f”命令,輸入密鑰后,得到解密后的文件。
對于后者來說,可以執(zhí)行“openssl enc -aes128 -a-in jimi.txt -out jimi.aes”命令,根據(jù)提示輸入兩次密鑰,完成對“jimi.txt”文件的加密,得到加密后的 文件“jimi.aes”。“-aes128”參數(shù)表示使用128位的AES加密算法,“-a”參數(shù)表示生成的加密文件由ASCII碼組成,如果不使用該參數(shù),生成的加密文件是二進制狀態(tài),無法直接查看。當對方收到該文件后,執(zhí)行“openssl enc -d-aes128 -a -in jimi.aes-out jimi.txt”命令,輸入密碼后,可以對其解密。
使用AES加密模塊對文件進行加密,執(zhí)行“modprobe aes”命令,手工加載AES加密模塊。執(zhí)行“yum install dnsetup cryptsetup” 命令,安裝DMsetup工具包。執(zhí)行“modprobe dm-crypt” 命令,會使用Device-Mapper設(shè)備映射機制自動完成注冊操作。Device mapper是Linux 2.6 內(nèi)核中提供的一種從邏輯設(shè)備到物理設(shè)備的映射框架機制,在該機制下,可以根據(jù)自己的需要制定實現(xiàn)存儲資源的管理策略。
執(zhí)行“dmsetup targets”命令,在輸出列表中可以看到Crypt的版本信息。要想實現(xiàn)加密操作,需要創(chuàng)建對應(yīng)的加密設(shè)備。利用dd命令創(chuàng)建一個空磁盤映像文件,加載為虛擬的存儲設(shè)備,就可以加密文件系統(tǒng)了。執(zhí)行“dd if=/dev/zero of=/xunijiami.img=1M count=200”命令,創(chuàng)建名稱為xunijiami.img、容量為200MB的映像文件。
執(zhí)行“l(fā)osetup /dev/loo0 /virtual.img”命令,得到路徑為“/dev/loop0”的虛擬存儲設(shè)備。之后執(zhí)行“cryptsetup -y create kp_vrd /dev/loop0”命令,系統(tǒng)會要求用戶輸入邏輯卷的密碼,這對于保護文件安全很重要。您可以在其中存儲機密文件,實現(xiàn)透明加密操作。 “y”參數(shù)的作用要求輸入兩次密碼,防止因為失誤導(dǎo)致忘記密碼的情況。您可以在其中存儲機密文件,實現(xiàn)透明加密操作。也可以在物理存儲設(shè)備(例如“dev/hda1”等)上建立邏輯卷,實現(xiàn)與塊設(shè)備的綁定。
執(zhí)行“cryptsetup -y create kp_vrd /dev/hda1”命令,同樣可以用于加密文件的邏輯卷。執(zhí)行“dmsetup ls”命令,列出所有的邏輯卷信息。因為Device-Mapper機制會將虛擬設(shè)備裝載到“dev/mapper”位置,所以上述虛擬塊設(shè)備實際的位置應(yīng)為“dev/mapper/kp_vrd”。具體使用時,必須創(chuàng)建文件系 統(tǒng),執(zhí)行“mkfs.Ext3 /dev/mapper/kp_vrd”命令即可。執(zhí)行“mkdir /mnt/kp_vrd /”命令,創(chuàng)建用于裝載的路徑,執(zhí)行“mount /dev/mapper/kp_vrd /mnt/ kp_vrd”命令,將虛擬設(shè)備加載到指定的裝載點中。
完成以上操作后,加密存儲設(shè)備就創(chuàng)建完成了。您可以像使用普通磁盤一樣,向“/mnt/kp_vrd”目 錄 存儲機密文件。在文件寫入該目錄之前,都經(jīng)過了透明的加密處理,之后才將其存放到該目錄中。如果直接讀取其中的文件,顯示的是加密過的內(nèi)容,無法查看其真實內(nèi)容。使用完畢后,執(zhí)行“cryptsetup remove kp_vrd”命令徹底卸載。
非對稱加密方式是使用私鑰對數(shù)據(jù)進行簽名,使用公鑰對其進行校驗。對于非對稱加密,最常用的是RSA和EIGamal加密算法。RSA算法的特點是可以將公鑰嵌入到私鑰中,來形成鑰匙對。缺點是只能對小于100個字節(jié)的文本進行加密,進行大量數(shù)據(jù)加密時效率較低。使用RSA的方法是在公私鑰架構(gòu)的基礎(chǔ)上,來傳輸秘密的鑰匙(Session Key),當傳輸完畢后再切換為更加高效的對稱加密方式。使用gpg,openssl rsautl等工具,實現(xiàn)非對稱加密。
例 如,用 戶User1使用“openssl genrsa 1024>secret.key”命令,生成長度為1024的RSA私鑰,保存在“secret.key”文件中。因為公鑰嵌入在私鑰中,所以執(zhí)行“openssl rsa -pubout-in scret.Key > public.key”命令,將公鑰提取到“public.key”文件中。對于用戶User2,也需要執(zhí)行同樣的操作,得到RSA公鑰和私鑰,例 如“secret2.key”和“public2.key”。當需要對名為“jimi.txt”的文件進行加密時,執(zhí)行“openssl rsautil-encrpyt -pubin -inkey public2.key -in jimi.txt-out jimi.enc”命令,使用User2的公鑰對該文件進行加密,生成加密后的文件“jimi.enc”。用戶User1將該加密文件發(fā)送給用戶User2,用戶User2執(zhí)行“openssl rsautil-decrpyt -pubin -inkey secret1.key -in jimi.enc-out jimi.txt”命令,使用私鑰文件“secret1.key”對加密的文件進行解密,得到所需的原文件。對應(yīng)的,當User2對文件加密時,需要使用User1的公鑰,當User1接收到加密文件后,使用自身的私鑰對其解密。
使用GPG也可以實現(xiàn)非對稱加密,例如User1用戶執(zhí)行“gpg --gen-key”命令,根據(jù)提示選擇加密類型,例如輸入“1”,表示使用“DSA and Elgamal”方式,即可以實現(xiàn)加密也可以實現(xiàn)簽名。輸入長度(例如2048),設(shè)置密鑰長度。根據(jù)提示輸入“0”,表示密鑰永不失效。在“Real name”欄中輸入使用者的名字,長度不小于5個字符,這樣做的好處在于根據(jù)不同的名稱ID,來生成不同的私鑰,可以適用于不同的加密場合。之后輸入私鑰的密碼,這樣可以保護私鑰安全。當確認以上操作后,才可以生成公鑰(pubring.gpg)和私鑰(secring.gpg)。打開當前賬戶目錄下“.gnupg”的隱藏目錄,可以看到這些公私鑰文件。
執(zhí)行“gpg --expert -a>user1.gpgpub”命令,將公鑰信息以ASCII格式導(dǎo)出為“user1.gpgpub”公鑰文件。對應(yīng)的,用戶User2也執(zhí)行同樣的操作,生成自己的鑰匙對,并將公鑰導(dǎo)出為“user2.gpgpub”文件。User2執(zhí)行“gpg--import user1.pgppub”命令,將User1的公鑰導(dǎo)入進來。執(zhí)行“gpg --list-key”命令,可以看到User2擁有的密鑰列表。當User2想傳輸一個機密文件給User1,為了防止中途被黑客攔截,需要對其進行加密。執(zhí)行“gpg-r user1 -e jimi.txt”命令,使用User1的公鑰對文件進行加密,“-r”參數(shù)指明使用誰的公鑰。將得到的加密文件“jimi.txt.gpg”發(fā)送給User1,User1執(zhí)行“gpg -d jimi.txt.gpg > jimi.txt”命令,使用自己的私鑰對該加密文件進行解密。
在非對稱加密架構(gòu)中,可以使用私鑰進行數(shù)字簽名,防止信息被模仿。例如,當用戶User1使用私鑰對發(fā)送的信息加密簽名,將其發(fā)送給User2。User2使用User1的公鑰將其打開后,那么User1將不可對其進行否認,這保證了數(shù)據(jù)的完整性和合法性。常用的簽名算法包括 RSAE、EIGamal、DSA等。例如,User1可以執(zhí)行“gpg -s kehao.txt” 命令,使用自己的GPG私鑰對文件“kehao.txt”進行簽名,會在同一路徑下生成同名的后綴為“.gpg”的文件,在該文件包含了原文件和簽名信息。這里的命令格式適用于存在單個密鑰對的情況,如果存在多個密鑰對,需要使用“-r keyID”參數(shù)指明具體的私鑰。執(zhí)行“gpg --list-key”命令,可以查看當前的密鑰信息。執(zhí)行“gpg --expert -a>user1.gpgpub”命令,將公鑰信息以ASCII格式導(dǎo)出為“user1.gpgpub”公鑰文件。
將簽名文件和公鑰文件發(fā)送給用戶User2,用戶User2執(zhí)行“gpg --import user1.pgppub” 命令, 將User1的公鑰導(dǎo)入進來。當User2收到“kehao.txt.gpg”文件后,執(zhí)行“gpg -o kahao.txt -d kehao.txt.gpgpub”命令,可以使用User1的公鑰對“kekao.txt”進行校驗,在校驗信息中會顯示“Good signature from " User1"”內(nèi)容,說明該文件的確是User1發(fā)送來的。因為簽名信息嵌入到了原文件中,所以之后可以執(zhí)行“cat kehao.txt”,來查看原文件內(nèi)容。為了便于使用,可以將簽名信息單獨保存為文件,例如User1可以執(zhí)行“gpg -b-s kehao.txt”命令,得到單獨的簽名文件“kehao.txt.sig”。 將“kehao.txt” 和“kehao.txt.sig”文件發(fā)送給User2,User2除了可以直接查看原文件外,還可以執(zhí)行“gpg --verity kehao.txt.gpg kehao.txt”命令,同樣可以執(zhí)行簽名校驗操作。