There are two types of SIM cards are there, Native Cards and Java Cards. To generate a byte code in a Native card we can use Wireless Markup Language (WML). Java cards will run Java Scripts and are high cost.
There are two unique parameters for a SIM. Known as IMSI (International Mobile Subscriber Identity) and ICCID (Integrated Circuit Card Identifier).
IMSI (15 digits)
We use IMSI for location updates, for charging, etc. And IMSI is a network internal parameter. So we need to hide it from external parties to avoid any fraud. To access that another key is required (known as ADM).
ICCID (19 digits)
Other important parameters• MSISDN - Mobile Station International Subscriber Directory Number (the telephone number to the SIM card)
• Ki – Authentication key
• KC - Ciphering key
• PIN - Personal Identification Number
• PUK - Personal Unblocking Code
• ADM Code – To view encrypted details of the SIM
Why MSISDN not unique to a SIM card? If you lose your SIM card you can obtain another SIM card with same MSISDN. In such situation we can remove existing mapping of IMSI, ICCID with MSISDN and redefine a new ICCID for the MSISDN. This is not possible if MSISDN is unique for a SIM.
When a mobile communicates with the Base Station the data will be encrypted using KC as a security measure. That will make it difficult for others to listen to the calls, etc.