I'm using IBE in my applied-crypto project in primitive form. I saw many articles about IBE, but didn't find how user can get private key is generated by PKG after EXTRACT method. So, my question: What is the best practice to hand private key to user after EXTRACT method?
Crypto is nice and clean until you think about how to manage the keys. Common Identity-based Encryption (IBE) schemes have a tremendous disadvantage, that a trusted key authority generates private keys for some user and the user has to be given that key. The most common scenario for IBE is a corporate environment, so I will only ways to solve that in that environment. Note that all communication should be TLS encrypted.
If the user registers, they get an e-mail account and a private key that has that e-mail account as an identity. The security games in IBE schemes usually consider that an attacker can register many e-mail accounts and therefore request many the private keys with those. The schemes are proven secure when the attacker cannot derive the private key of an identity of another user.
This works fine, but the user would have to handle the key themselves and might even inadvertently misplace or leak it.
In a corporate environment, we usually have an IT department which either sets up the corporate workstation or adds a secure container on a BYOD-device. This administrator surely can write the private key for that user to a USB key and copy it to the configuration of the software that uses it. This makes it slightly harder for the user to do something dumb. Keep in mind that the private key can always be regenerated based on the e-mail account.
Other hardware is also possible. An administrator could generate the private key and push it to a smartcard which is then given to the user in person.
This has the added bonus that the user cannot really copy their privileges, because smartcards usually have a hardware-enforced copy-protection. They could still give their card to somebody else.
If the user abuses their privilege to access some data, be sure to have the necessary logs and a system in place to detect those events.
You can implement a Key Generation Center and a Key Distribution Center. You must define this like a Trusted Authority.
Hint: Send this key using HTTPS after a user request, if you you want a dynamic system. However you can send it to e-mail address and save to using it.