# 22.4 Identity-Based Encryption

In most public key systems, when Alice wants to send a message to Bob, she looks up his public key in a directory and then encrypts her message. However, she needs some type of authentication – perhaps the directory has been modified by Eve, and the public key listed for Bob was actually created by Eve. Alice wants to avoid this situation. It was suggested by Shamir in 1984 that it would be nice to have an identity-based system, where Bob’s public identification information (for example, his email address) serves as his public key. Such a system was finally designed in 2001 by Boneh and Franklin.

Of course, some type of authentication of each user is still needed. In the present system, this occurs in the initial setup of the system during the communications between the Trusted Authority and the User. In the following, we give the basic idea of the system. For more details and improvements, see [Boneh-Franklin].

We need two public hash functions:

${H}_{1}$ maps arbitrary length binary strings to multiples of ${P}_{0}\text{.}$ A little care is needed in defining ${H}_{1}\text{,}\text{}$ since no one should be able, given a binary string $b\text{,}\text{}$ to find $k$ with ${H}_{1}(b)=k{P}_{0}\text{.}$ See Exercise 7.

${H}_{2}$ maps $q$th roots of unity to binary strings of length $n\text{,}\text{}$ where $n$ is the length of the messages that will be sent. Since ${H}_{2}$ must be specified before the system is set up, this limits the lengths of the messages that can be sent. However, the message could be, for example, a DES key that is used to encrypt a much longer message, so this length requirement is not a severe restriction.

To set up the system we need a Trusted Authority. Let’s call him Arthur. Arthur does the following.

He chooses, once and for all, a secret integer $s\text{.}$ He computes ${P}_{1}=s{P}_{0}\text{,}\text{}$ which is made public.

For each User, Arthur finds the user’s identification

*ID*(written as a binary string) and computes$${D}_{\text{User}}=s\text{\hspace{0.17em}}{H}_{1}(ID)\text{.}$$Recall that ${H}_{1}(ID)$ is a point on $E\text{,}\text{}$ so ${D}_{\text{User}}$ is $s$ times this point.

Arthur uses a secure channel to send ${D}_{\text{User}}$ to the user, who keeps it secret. Arthur does not need to store ${D}_{\text{User}}\text{,}\text{}$ so he discards it.

The system is now ready to operate, but first let’s review what is known:

Public: $E\text{,}\text{}p\text{,}\text{}{P}_{0}\text{,}\text{}{P}_{1}\text{,}\text{}{H}_{1}\text{,}\text{}{H}_{2}$

Secret: $s$ (known only to Arthur), ${D}_{\text{User}}$ (one for each User; it is known only by that User)

Alice wants to send an email message $m$ (of binary length $n$) to Bob, who is one of the Users. She knows Bob’s address, which is `bob@computer.com.`

This is his *ID*. Alice does the following.

She computes $g=\tilde{e}$(${H}_{1}$

`(bob@computer.com)`

, ${P}_{1}$). This is a $q$th root of unity.She chooses a random $r\overline{)\equiv}0\text{\hspace{0.17em}}\text{\hspace{0.17em}}(\text{mod}\text{\hspace{0.17em}}q)$ and computes

$$t=m\oplus {H}_{2}({g}^{r})\text{.}$$She sends Bob the ciphertext

$$c=(r{P}_{0}\text{,}\text{}\text{\hspace{0.17em}}t)\text{.}$$Note that $r{P}_{0}$ is a point on $E\text{,}\text{}$ and $t$ is a binary string of length $n\text{.}$

If Bob receives a pair $(U\text{,}\text{}v)\text{,}\text{}$ where $U$ is a point on $E$ and $v$ is a binary string of length $n\text{,}\text{}$ then he does the following.

He computes $h=\tilde{e}({D}_{\text{Bob}}\text{,}\text{}\text{\hspace{0.17em}}U)\text{,}\text{}$ which is a $q$th root of unity.

He recovers the message as

$$m=v\oplus {H}_{2}(h)\text{.}$$

Why does this yield the message? If the encryption is performed correctly, Bob receives $U=r{P}_{0}$ and $v=t=m\oplus {H}_{2}({g}^{r})\text{.}$ Since ${D}_{\text{Bob}}=s\text{\hspace{0.17em}}{H}_{1}$ `(bob@computer.com)`

,

Therefore,

as desired. Note that the main step is Equation (22.1), which removes the secret $s$ from the ${D}_{\text{Bob}}$ in the first argument of $\tilde{e}$ and puts it on the ${P}_{0}$ in the second argument. This follows from the bilinearity property of the function $\tilde{e}\text{.}$ Almost all of the cryptographic uses of pairings have a similar idea of moving from one masking of the secret to another. The pairing allows this to be done without knowing the value of $s\text{.}$

It is very important that $s$ be kept secret. If Eve obtains $s\text{,}\text{}$ then she can compute the points ${D}_{\text{User}}$ for each user and read every email. Since ${P}_{1}=s{P}_{0}\text{,}\text{}$ the security of $s$ is compromised if Eve can compute discrete logs on the elliptic curve. Moreover, the ciphertext contains $r{P}_{0}\text{.}$ If Eve can compute a discrete log and find $r\text{,}\text{}$ then she can compute ${g}^{r}$ and use this to find ${H}_{2}({g}^{r})$ and also $m\text{.}$ Therefore, for the security of the system, it is vital that $p$ be chosen large enough that discrete logs are computationally infeasible.