I've been reading up about ID-based encryption, but can't find any implementations (the maths in the paper is a bit much for me). Does anyone know where I might go looking to find an implementation? I don't really mind what language it's in.
IBE permits any string of bits to be used as a public key, and the private key is derived on the fly from it by the PKG after authentication. Private key generation in this manner is not possible with methods like RSA or using classic CA's where pre generated key pairs are needed before any encryption can take place.
IBE is a different approach and avoids the need for the certificate to bind the public key to an identity: authentication and identity verification is independent and separater in an IBE scheme versus tightly coupled in legacy PKI. This means that the need to generate, bind, manage, publish, revoke, have responders for etc for public key certificates is removed. Also, given all keys are generated other than the root key(s), there's no database of public keys, no need for an escrow database etc. This makes operational matters far simpler.
Generally IBE keys are short lived too e.g. a week, an hour etc which removes the need for a revocation process as they naturally retire.
Given the public key can be any arbitrary string, this means that time can be bound into the string, as well as policy information. This provides a lot of flexibility to handle ad-hoc public key encryption and naturally permits federation - very important in cloud environments for example.
Commercial implementations exist - www.voltage.com being the most well known. Its standardized - IEEE 1363.3 and IETF 5091 et al.
SSL with certificates is a form of IBE. Verisign is the PKG from the article; it generates certificates for verified and trusted network channels, which expose the RSA public key used to send messages to this endpoint. The private key is also obtained via the PKG. Now, when communicating with this endpoint, callers can encrypt with the public key from the word go, meaning no information has to be sent "cleartext".