With pairing-based cryptography we have two cyclic groups (\(G_1\) and \(G_2\)), and which are of an order of a prime number (\(n\)). A pairing on \((G_1,G_2,G_T)\) defines the function \(e:G_1 \times G_2 \rightarrow G_T\), and where \(g_1\) is a generator for \(G_1\) and \(g_2\) is a generator for \(G_2\). If \(U\) is a point on \(G_1\), and \(V\) is a point on \(G_2\), we have following rules:
\(e(aU,bV) = e(U,V)^{ab} = e(abU, V) = e(U, abV ) = e(bU,aV)\)
In this case Alice gets Bob's ID (\(Q_{id}\)). The trust server then selects a secret (\(s\)) and creates a public key of \(sU\), and where \(U\) is a point on the curve.
Alice then selects a random value (\(r\)) and creates a pairing of \(e(sU,Q_{id})^r\). Bob uses a private key of \(sQ_{id}\) and generates the same key with \(e(rU,sQ_{id})\).