Ad hoc simply means:
Ad hoc is a Latin phrase meaning "for this". It generally signifies a solution designed for a specific problem or task, non-generalizable, and not intended to be able to be adapted to other purposes.
In security, using ad-hoc protocols is usually a bad thing. There are (now) well defined well-analyzed MAC protocols; e.g., HMAC (hash-based MAC) defined as: HMAC(k, m) = H((k ^ opad) + H((k ^ ipad) ++ m))
, where H
is a hash function (e.g., SHA128), opad is a block long hexadecimal constant 5c5c5c...5c
, ipad is a 363636...36
, k is the shared secret key (used to generate and validate the MAC), ^
is XOR, +
is concatenation.
In SSLv3, the MAC described in section 5.2.3.1 at first glance looks like a HMAC:
The MAC is generated as:
hash(MAC_write_secret + pad_2 +
hash(MAC_write_secret + pad_1 + seq_num +
SSLCompressed.type + SSLCompressed.length +
SSLCompressed.fragment));
where "+" denotes concatenation.
pad_1: The character 0x36 repeated 48 times for MD5 or 40 times for SHA.
pad_2: The character 0x5c repeated 48 times for MD5 or 40 times for SHA.
but note XOR is never used -- its always concatenation. Note it is H(k + opad + H(k + ipad + m))
. Furthermore, the MAC write secret k
is simply MD5(master_secret + SHA('A' + master_secret + ServerHello.random + ClientHello.random))
in the case of MD5 being the hash. It's quite possible that these non-standard constructions leak information to very powerful attackers.
To quote this paper (Differences between SSLv2, SSLv3, and TLS (PDF)):
Ad hoc use of message authentication codes: there are MAC constructions that have not been subject to analysis such as HMAC. Wagner and Schneier don't have any specific objections to them but the point is valid: it's better to use something that has withstood a fair amount of analysis than something that hasn't, particularly in fielded systems.
Granted going back to Wagner and Schneier's paper (PDF), it seems that SSLv3 is just using an old version of HMAC that was obsolete in 1996:
SSL protects the integrity of application data by using a cryptographic MAC. The SSL designers have chosen to use HMAC, a simple, fast hash-based construction with some strong theoretical evidence for its security [BCK96]. In an area where several initial ad-hoc proposals for MACs have been cryptanalyzed, these provable security results are very attractive. HMAC is rapidly becoming the gold standard of message authentication, and it is an excellent choice for SSL. Barring major unexpected cryptanalytic advances, it seems unlikely that HMAC will be broken in the near future.
We point out the SSL 3.0 uses an older obsolete version of the HMAC construction. SSL should move to the updated current HMAC format when convenient for maximal security.