Bug 195630 - Calling ecb_crypt()/cbc_crypt() actually does not encrypt or decrypt the passed data buffer
Summary: Calling ecb_crypt()/cbc_crypt() actually does not encrypt or decrypt the pass...
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: misc (show other bugs)
Version: 10.1-STABLE
Hardware: amd64 Any
: --- Affects Only Me
Assignee: freebsd-bugs mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-12-03 17:45 UTC by ebfe
Modified: 2017-04-23 18:30 UTC (History)
0 users

See Also:


Attachments
minimal poc code in C (2.32 KB, text/plain)
2014-12-03 17:45 UTC, ebfe
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description ebfe 2014-12-03 17:45:13 UTC
Created attachment 150148 [details]
minimal poc code in C

Calling ecb_crypt()/cbc_crypt() actually does not encrypt or decrypt the passed data buffer but returns a [DESERR_NOHWDEVICE] " == Encryption succeeded, but done in software".

See attached poc.c

Details:

Component: des_crypt, /usr/src/lib/libc/rpc/des_crypt.c
OS: FreeBSD 10.1 STABLE

man ecb_crypt(3) says "The ecb_crypt() and cbc_crypt() functions implement the NBS DES ... The ecb_crypt() function encrypts in ECB (Electronic Code
Book) mode, which encrypts blocks of data independently.  The cbc_crypt()
function encrypts in CBC (Cipher Block Chaining) mode, which chains
together successive blocks."

but actually - "nothing happens" and "it doesn't work!(tm)" (the return code suggests a successfull encryption stept but the data remains unmodified)

How to reproduce:
------------
#define LEN 8
char key1[LEN] = "testkey1";
char secret1[LEN] = "secret 1";

des_setparity(key1);
ecb_crypt(key1, secret1, LEN, DES_ENCRYPT);
printf("ecb_crypt result: key: %.*s, encrypted buf: %.*s\n", LEN, key1, LEN, secret1);
-----------
see the poc.c for a minimal example.

PS: And no, I am not using ecb/cbc_crypt in my software ;) - some time ago I tried to implement some kind of a "master password" extension for claws-mail (e-mail client). I was surprised by the fact, that the passwords for email-accouts are stored in plain text (encoded in base64) and not obfuscated with DES-foo-magic (DES-encryption with hard-coded password, mentioned multiple times in claws mailing list) - it turned out, that claws-mail's code for password obfuscation calls ecb_crypt on FreeBSD.