Index:
CPU_ELAN(4)CPU_SOEKRIS(4)
aac(4)
acd(4)
acpi(4)
acpi_asus(4)
acpi_panasonic(4)
acpi_thermal(4)
acpi_toshiba(4)
acpi_video(4)
ad(4)
adv(4)
adw(4)
afd(4)
agp(4)
agpgart(4)
aha(4)
ahb(4)
ahc(4)
ahd(4)
aic(4)
aio(4)
alpm(4)
altq(4)
amd(4)
amdpm(4)
amr(4)
an(4)
apm(4)
ar(4)
arcmsr(4)
arl(4)
arp(4)
asr(4)
ast(4)
ata(4)
atapicam(4)
ath(4)
ath_hal(4)
atkbd(4)
atkbdc(4)
aue(4)
awi(4)
axe(4)
bfe(4)
bge(4)
bktr(4)
blackhole(4)
bpf(4)
bridge(4)
brooktree(4)
bt(4)
cam(4)
card(4)
cardbus(4)
carp(4)
cbb(4)
ccd(4)
cd(4)
cdce(4)
ch(4)
ciss(4)
cm(4)
cnw(4)
cp(4)
cpufreq(4)
crypto(4)
cryptodev(4)
cs(4)
ct(4)
ctau(4)
cue(4)
cx(4)
cy(4)
da(4)
dc(4)
dcons(4)
dcons_crom(4)
ddb(4)
de(4)
devctl(4)
digi(4)
disc(4)
divert(4)
dpt(4)
dummynet(4)
ed(4)
ef(4)
ehci(4)
el(4)
em(4)
en(4)
ep(4)
esp(4)
ex(4)
exca(4)
faith(4)
fast_ipsec(4)
fatm(4)
fd(4)
fdc(4)
fe(4)
fea(4)
firewire(4)
fla(4)
fpa(4)
fwe(4)
fwip(4)
fwohci(4)
fxp(4)
gbde(4)
gdb(4)
gem(4)
geom(4)
gif(4)
gre(4)
gx(4)
harp(4)
hatm(4)
hfa(4)
hifn(4)
hme(4)
hptmv(4)
i4b(4)
i4bcapi(4)
i4bctl(4)
i4bing(4)
i4bipr(4)
i4bisppp(4)
i4bq921(4)
i4bq931(4)
i4brbch(4)
i4btel(4)
i4btrc(4)
iavc(4)
ichsmb(4)
ichwd(4)
icmp(4)
icmp6(4)
ida(4)
idt(4)
ie(4)
ieee80211(4)
if_an(4)
if_aue(4)
if_awi(4)
if_axe(4)
if_bfe(4)
if_bge(4)
if_cue(4)
if_dc(4)
if_de(4)
if_disc(4)
if_ed(4)
if_ef(4)
if_em(4)
if_en(4)
if_faith(4)
if_fatm(4)
if_fwe(4)
if_fwip(4)
if_fxp(4)
if_gem(4)
if_gif(4)
if_gre(4)
if_gx(4)
if_hatm(4)
if_hme(4)
if_idt(4)
if_kue(4)
if_lge(4)
if_my(4)
if_ndis(4)
if_nge(4)
if_oltr(4)
if_patm(4)
if_pcn(4)
if_ppp(4)
if_re(4)
if_rl(4)
if_rue(4)
if_sbni(4)
if_sbsh(4)
if_sf(4)
if_sis(4)
if_sk(4)
if_sl(4)
if_sn(4)
if_ste(4)
if_stf(4)
if_tap(4)
if_ti(4)
if_tl(4)
if_tun(4)
if_tx(4)
if_txp(4)
if_udav(4)
if_vge(4)
if_vlan(4)
if_vr(4)
if_wb(4)
if_wi(4)
if_xe(4)
if_xl(4)
ifmib(4)
ifpi(4)
ifpi2(4)
ifpnp(4)
ihfc(4)
iic(4)
iicbb(4)
iicbus(4)
iicsmb(4)
iir(4)
imm(4)
inet(4)
inet6(4)
intpm(4)
intro(4)
io(4)
ip(4)
ip6(4)
ipaccounting(4)
ipacct(4)
ipf(4)
ipfirewall(4)
ipfw(4)
ipl(4)
ipnat(4)
ips(4)
ipsec(4)
isic(4)
isp(4)
ispfw(4)
itjc(4)
iwic(4)
ixgb(4)
joy(4)
kame(4)
keyboard(4)
kld(4)
kmem(4)
ktr(4)
kue(4)
led(4)
lge(4)
linux(4)
lnc(4)
lo(4)
longrun(4)
loop(4)
lp(4)
lpbb(4)
lpt(4)
mac(4)
mac_biba(4)
mac_bsdextended(4)
mac_ifoff(4)
mac_lomac(4)
mac_mls(4)
mac_none(4)
mac_partition(4)
mac_portacl(4)
mac_seeotheruids(4)
mac_stub(4)
mac_test(4)
mcd(4)
md(4)
mem(4)
meteor(4)
miibus(4)
mlx(4)
mly(4)
mouse(4)
mpt(4)
mse(4)
mtio(4)
multicast(4)
my(4)
natm(4)
natmip(4)
ncr(4)
ncv(4)
ndis(4)
net(4)
netgraph(4)
netintro(4)
networking(4)
ng_UI(4)
ng_async(4)
ng_atm(4)
ng_atmllc(4)
ng_atmpif(4)
ng_bluetooth(4)
ng_bpf(4)
ng_bridge(4)
ng_bt3c(4)
ng_btsocket(4)
ng_ccatm(4)
ng_cisco(4)
ng_device(4)
ng_echo(4)
ng_eiface(4)
ng_etf(4)
ng_ether(4)
ng_fec(4)
ng_frame_relay(4)
ng_gif(4)
ng_gif_demux(4)
ng_h4(4)
ng_hci(4)
ng_hole(4)
ng_hub(4)
ng_iface(4)
ng_ip_input(4)
ng_ksocket(4)
ng_l2cap(4)
ng_l2tp(4)
ng_lmi(4)
ng_mppc(4)
ng_netflow(4)
ng_one2many(4)
ng_ppp(4)
ng_pppoe(4)
ng_pptpgre(4)
ng_rfc1490(4)
ng_socket(4)
ng_split(4)
ng_sppp(4)
ng_sscfu(4)
ng_sscop(4)
ng_tee(4)
ng_tty(4)
ng_ubt(4)
ng_uni(4)
ng_vjc(4)
ng_vlan(4)
nge(4)
nmdm(4)
npx(4)
nsp(4)
null(4)
ohci(4)
oldcard(4)
oltr(4)
opie(4)
orm(4)
pae(4)
pass(4)
patm(4)
pccard(4)
pccbb(4)
pcf(4)
pci(4)
pcic(4)
pcm(4)
pcn(4)
pcvt(4)
perfmon(4)
pf(4)
pflog(4)
pfsync(4)
pim(4)
plip(4)
pnp(4)
pnpbios(4)
polling(4)
ppbus(4)
ppc(4)
ppi(4)
ppp(4)
psm(4)
pst(4)
pt(4)
pty(4)
puc(4)
random(4)
rawip(4)
ray(4)
rc(4)
re(4)
rl(4)
rndtest(4)
route(4)
rp(4)
rue(4)
sa(4)
sab(4)
safe(4)
sbni(4)
sbp(4)
sbp_targ(4)
sbsh(4)
sc(4)
scbus(4)
scd(4)
sched_4bsd(4)
sched_ule(4)
screen(4)
screensaver(4)
scsi(4)
sem(4)
ses(4)
sf(4)
si(4)
sio(4)
sis(4)
sk(4)
skey(4)
sl(4)
smapi(4)
smb(4)
smbus(4)
smp(4)
sn(4)
snc(4)
snd(4)
snd_ad1816(4)
snd_als4000(4)
snd_cmi(4)
snd_cs4281(4)
snd_csa(4)
snd_ds1(4)
snd_emu10k1(4)
snd_es137x(4)
snd_ess(4)
snd_fm801(4)
snd_gusc(4)
snd_ich(4)
snd_maestro(4)
snd_maestro3(4)
snd_neomagic(4)
snd_sbc(4)
snd_solo(4)
snd_uaudio(4)
snd_via8233(4)
snd_via82c686(4)
snd_vibes(4)
snp(4)
sound(4)
speaker(4)
spic(4)
spkr(4)
splash(4)
sppp(4)
sr(4)
stderr(4)
stdin(4)
stdout(4)
ste(4)
stf(4)
stg(4)
streams(4)
svr4(4)
sym(4)
syncache(4)
syncer(4)
syncookies(4)
syscons(4)
sysmouse(4)
tap(4)
targ(4)
tcp(4)
tdfx(4)
termios(4)
ti(4)
tl(4)
trm(4)
ttcp(4)
tty(4)
tun(4)
twa(4)
twe(4)
tx(4)
txp(4)
uart(4)
ubsa(4)
ubsec(4)
ubser(4)
ubtbcmfw(4)
ucom(4)
udav(4)
udbp(4)
udp(4)
ufm(4)
uftdi(4)
ugen(4)
uhci(4)
uhid(4)
uhidev(4)
ukbd(4)
ulpt(4)
umass(4)
umct(4)
umodem(4)
ums(4)
unix(4)
uplcom(4)
urio(4)
usb(4)
uscanner(4)
utopia(4)
uvisor(4)
uvscom(4)
vga(4)
vge(4)
viapm(4)
vinum(4)
vinumdebug(4)
vlan(4)
vn(4)
vpd(4)
vpo(4)
vr(4)
vt(4)
vx(4)
watchdog(4)
wb(4)
wd(4)
wdc(4)
wi(4)
witness(4)
wl(4)
wlan(4)
worm(4)
xe(4)
xl(4)
xpt(4)
zero(4)
gbde(4)
NAME
gbde -- Geom Based Disk Encryption
SYNOPSIS
options GEOM_BDE
DESCRIPTION
NOTICE: Please be aware that this code has not yet received much review and analysis by qualified cryptographers and therefore should be consid- ered a slightly suspect experimental facility. We cannot at this point guarantee that the on-disk format will not change in response to reviews or bug-fixes, so potential users are advised to be prepared that dump(8)/restore(8) based migrations may be called for in the future. The objective of this facility is to provide a high degree of denial of access to the contents of a ``cold'' storage device. Be aware that if the computer is compromised while up and running and the storage device is actively attached and opened with a valid pass-phrase, this facility offers no protection or denial of access to the contents of the storage device. If, on the other hand, the device is ``cold'', it should present an for- midable challenge for an attacker to gain access to the contents in the absence of a valid pass-phrase. Four cryptographic barriers must be passed to gain access to the data, and only a valid pass-phrase will yield this access. When the pass-phrase is entered, it is hashed with SHA2 into a 512 bit ``key-material''. This is a way of producing cryptographic usable keys from a typically all-ASCII pass-phrase of an unpredictable user-selected length. First barrier: the location of the "lock-sector". During initialization, up to four independent but mutually aware ``lock'' sectors are written to the device in randomly chosen locations. These lock-sectors contain the 2048 random bit master-key and a number of parameters of the layout geometry (more on this later). Since the entire device will contain isotropic data, there is no short-cut to rapidly determine which sequence of bytes contain a lock-sector. To locate a lock-sector, a small piece of data called the ``metadata'' and the key-material must be available. The key-material decrypts the metadata, which contains the byte offset on the device where the corre- sponding lock-sector is located. If the metadata is lost or unavailable but the key-material is at hand, it would be feasible to do a brute force scan where each byte offset of the device is checked to see if it con- tains the lock-sector data. Second barrier: decryption of the master-key using key-material. The lock-sector contains an encrypted copy of an architecture neutral byte-sequence which encodes the fields of the lock-structure. The order in which these fields are encoded is determined from the key-material. The encoded bytestream is encrypted with 256bit AES in CBC mode. The actual payload of the sector is encrypted with 128 bit AES in CBC mode using a single-use random bits key. Examining the reverse path Assuming an attacker knows an amount of plaintext and has managed to locate the corresponding encrypted sectors on the device, gaining access to the plaintext context of other sectors is a daunting task: First he will have to derive from the encrypted sector and the known plain text the sector key(s) used. At the time of writing, it has been speculated that it could maybe be possible to break open AES in only 2^80 operations; even so, that is still a very impossible task. Armed with one or more sector keys, our patient attacker will then go through essentially the same exercise, using the sector key and the encrypted sector key to find the key used to encrypt the sectorkey. Armed with one or more of these ``kkeys'', our attacker has to run them backwards through MD5. Even though he knows that the input to MD5 was 24 bytes and has the value of 8 of these bytes from the sector number, he is still faced with 2^128 equally likely possibilities. Having successfully done that, our attacker has successfully discovered up to 16 bytes of the master-key, but is still unaware which 16 bytes, and in which other sectors any of these known bytes contribute to the kkey. To unravel the last bit, the attacker has to guess the 16 byte random- bits salt stored in the lock-sector to recover the indexes into the mas- terkey. Any attacker with access to the necessary machine power to even attempt this attack will be better off attempting to brute-force the pass-phrase. Positive denial facilities Considering the infeasibility of the above attack, gaining access to the pass-phrase will be of paramount importance for an attacker, and a number of scenarios can be imagined where undue pressure will be applied to an individual to divulge the pass-phrase. A ``Blackening'' feature provides a way for the user, given a moment of opportunity, to destroy the master-key in such a way that the pass-phrase will be acknowledged as good but access to the data will still be denied. A practical analogy For persons who think cryptography is only slightly more interesting than watching silicon sublimate the author humbly offers this analogy to the keying scheme for a protected device: Imagine an installation with a vault with walls of several hundred meters thick solid steel. This vault can only be feasibly accessed using the single key, which has a complexity comparable to a number with 600 dig- its. This key exists in four copies, each of which is stored in one of four small safes, each of which can be opened with unique key which has a com- plexity comparable to an 80 digit number. In addition to this, a keyholder after opening his key-safe is also able to install a copy of the master-key and re-key any of key-safes (includ- ing his own). In normal use, the user will open the safe for which he has the key, take out the master-key and access the vault. When done, he will lock up the master-key in the safe again. If a keyholder-X for some reason distrusts keyholder-Y, she has the option of opening her own safe, flipping one of the switches and detonat- ing the bar of dynamite in safe-Y. This will obliterate the master-key in that safe and thereby deny keyholder-Y access to the vault. Should the facility come under attack, any of the keyholders can detonate all four bars of dynamite and thereby make sure that access to the vault is denied to everybody, keyholders and attackers alike. Should the facility fall to the enemy, and a keyholder be forced to apply his per- sonal key, he can do so in confidence that the contents of his safe will not yield access to the vault, and the enemy will hopefully realize that applying further pressure on the personnel will not give access to the vault. The final point to make here is that it is perfectly possible to make a detached copy of any one of these keys, including the master key, and deposit or hide it as one sees fit. Steganography support When the device is initialized, it is possible to restrict the encrypted data to a single contiguous area of the device. If configured with care, this area could masquerade as some sort of valid data or as random trash left behind by the systems operation. This can be used to offer a plausible deniability of existence, where it will be impossible to prove that this specific area of the device is in fact used to store encrypted data and not just random junk. The main obstacle in this is that the output from any encryption algo- rithm worth its salt is so totally random looking that it stands out like a sore thumb amongst practically any other sort of data which contains at least some kind of structure or identifying byte sequences. Certain file formats like ELF contain multiple distinct sections, and it would be possible to locate things just right in such a way that a device contains a partition with a file system with a large executable, (``a backup copy of my kernel'') where a non-loaded ELF section is laid out consecutively on the device and thereby could be used to contain a gbde encrypted device. Apart from the ability to instruct gbde which those sectors are, no sup- port is provided for creating such a setup. Deployment suggestions For personal use, it may be wise to make a backup copy of the masterkey or use one of the four keys as a backup. Fitting protection of this key is up to yourself, your local circumstances and your imagination. For company or institutional use, it is strongly advised to make a copy of the master-key and put it under whatever protection you have at your The payload is encrypted with AES in CBC mode using a 128 bit random sin- gle-use key (``the skey''). AES is well documented. No IV is used in the encryption of the sectors, the assumption being that since the key is random bits and single-use, an IV adds nothing to the security of AES. The random key is produced with arc4rand(9) which is believed to do a respectable job at producing unpredictable bytes. The skey is stored on the device in a location which can be derived from the location of the encrypted payload data. The stored copy is encrypted with AES in CBC mode using a 128 bit key (``the kkey'') derived from a subset of the master key chosen by the output of an MD5 hash over a 16 byte random bit static salt and the sector offset. Up to 6.25% of the masterkey (16 bytes out of 2048 bits) will be selected and hashed through MD5 with the sector offset to generate the kkey. Up to four copies of the master-key and associated geometry information is stored on the device in static randomly chosen sectors. The exact location inside the sector is randomly chosen. The order in which the fields are encoded depends on the key-material. The encoded byte-stream is encrypted with AES in CBC mode using 256 bit key-material. The key-material is derived from the user-entered pass-phrase using 512 bit SHA2. No chain is stronger than its weakest link, which usually is poor pass- phrases.
SEE ALSO
gbde(8)
HISTORY
This software was developed for the FreeBSD Project by Poul-Henning Kamp and NAI Labs, the Security Research Division of Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035 (``CBOSS''), as part of the DARPA CHATS research program.
AUTHORS
Poul-Henning Kamp <phk@FreeBSD.org> FreeBSD 5.4 October 19, 2002 FreeBSD 5.4
SPONSORED LINKS
Man(1) output converted with man2html , sed , awk