149 lines · 3.8 KB · Text
RawDownload
.TH DES 2.SH NAMEsetupDESstate, des_key_setup, block_cipher, desCBCencrypt, desCBCdecrypt, desECBencrypt, desECBdecrypt, des3CBCencrypt, des3CBCdecrypt, des3ECBencrypt, des3ECBdecrypt, key_setup, des56to64, des64to56, setupDES3state, triple_block_cipher  - single and triple digital encryption standard.SH SYNOPSIS.B #include <u.h>.br.B #include <libc.h>.br.B #include <mp.h>.br.B #include <libsec.h>.PP.Bvoid	des_key_setup(uchar key[8], ulong schedule[32]).PP.Bvoid	block_cipher(ulong *schedule, uchar *data, int decrypting).PP.Bvoid	setupDESstate(DESstate *s, uchar key[8], uchar *ivec).PP.Bvoid	desCBCencrypt(uchar *p, int len, DESstate *s).PP.Bvoid	desCBCdecrypt(uchar *p, int len, DESstate *s).PP.Bvoid	desECBencrypt(uchar *p, int len, DESstate *s).PP.Bvoid	desECBdecrypt(uchar *p, int len, DESstate *s).PP.in +0.5i.ti -0.5i.Bvoid	triple_block_cipher(ulong expanded_key[3][32], uchar text[8], int ende).PP.Bvoid	setupDES3state(DES3state *s, uchar key[3][8], uchar *ivec).PP.Bvoid	des3CBCencrypt(uchar *p, int len, DES3state *s).PP.Bvoid	des3CBCdecrypt(uchar *p, int len, DES3state *s).PP.Bvoid	des3ECBencrypt(uchar *p, int len, DES3state *s).PP.Bvoid	des3ECBdecrypt(uchar *p, int len, DES3state *s).PP.Bvoid	key_setup(uchar[7], ulong[32]).PP.Bvoid	des56to64(uchar *k56, uchar *k64).PP.Bvoid	des64to56(uchar *k64, uchar *k56).SH DESCRIPTIONThe Digital Encryption Standard (DES)is a shared-key or symmetric encryption algorithm using eithera 56-bit key for single DES or three 56-bit keys for triple DES.The keys are encoded into 64 bits where every eight bitis parity. .PPThe basic DES function,.IR block_cipher ,works on a block of 8 bytes, converting them in place.It takes a key schedule, a pointer to the block, anda flag indicating encrypting (0) or decrypting (1).The key schedule is created from the key using.IR des_key_setup ..PPSince it is a bit awkward,.I block_cipheris rarely called directly.  Instead, one normally usesroutines that encrypt larger buffers of data andwhich may chain the encryption state from one bufferto the next.These routines keep track of the state of theencryption using a.B DESstatestructure that contains the key schedule and any chainedstate..I SetupDESstatesets up the.B DESstatestructure using the key and an 8-byte initialization vector..PPElectronic code book, using.I desECBencryptand .IR desECBdecrypt , is the less secure mode.  The encryption of each 8 bytesdoes not depend on the encryption of any other.Hence the encryption is a substitutioncipher using 64 bit characters..PPCipher block chaining mode, using.I desCBCencryptand.IR desCBCdecrypt ,is more secure.  Every block encrypted depends on the initializationvector and all blocks encrypted before it..PPFor both CBC and ECB modes, a stream of data can be encrypted asmultiple buffers.  However, all buffers except the last mustbe a multiple of 8 bytes to ensure successful decryption ofthe stream..PPThere are equivalent triple-DES (DES3-EDE) functions for each of theDES functions..PPIn the past, Plan 9 used a 56-bit or 7-byteformat for DES keys.  To be compatible with the restof the world, we've abandoned this format.There are two functions,.I des56to64and.IR des64to56 ,to convert back and forth between the two formats.Also a key schedule can be set up from the 7-byte format using.IR key_setup ..SH SOURCE.B /sys/src/libsec.SH SEE ALSO.IR mp (2),.IR aes (2),.IR blowfish (2),.IR dsa (2),.IR elgamal (2),.IR rc4 (2),.IR rsa (2),.IR sechash (2),.IR prime (2),.IR rand (2).br.IR "Breaking DES" ,Electronic Frontier Foundation,O'Reilly, 1998.SH BUGSSingle DES can be realistically broken by brute-force;its 56-bit key is just too short.It should not be used in new code, which should probably use.IR aes (2)instead, or at least triple DES.