Rolesandservices: Difference between revisions
| Line 118: | Line 118: | ||
| | | | ||
General-purpose functions | General-purpose functions | ||
* FC_GetFunctionList | * <code>[http://developer.mozilla.org/en/docs/FC_GetFunctionList FC_GetFunctionList]</code> | ||
* FC_Initialize | * <code>[http://developer.mozilla.org/en/docs/FC_Initialize FC_Initialize]</code> | ||
* FC_Finalize | * <code>[http://developer.mozilla.org/en/docs/FC_Finalize FC_Finalize]</code> | ||
* FC_GetInfo | * <code>[http://developer.mozilla.org/en/docs/FC_GetInfo FC_GetInfo]</code> | ||
Slot and token management functions | Slot and token management functions | ||
* FC_GetSlotList | * <code>[http://developer.mozilla.org/en/docs/FC_GetSlotList FC_GetSlotList]</code> | ||
* FC_GetSlotInfo | * <code>[http://developer.mozilla.org/en/docs/FC_GetSlotInfo FC_GetSlotInfo]</code> | ||
* FC_GetTokenInfo | * <code>[http://developer.mozilla.org/en/docs/FC_GetTokenInfo FC_GetTokenInfo]</code> | ||
* FC_WaitForSlotEvent | * <code>[http://developer.mozilla.org/en/docs/FC_WaitForSlotEvent FC_WaitForSlotEvent]</code> | ||
* FC_GetMechanismList | * <code>[http://developer.mozilla.org/en/docs/FC_GetMechanismList FC_GetMechanismList]</code> | ||
* FC_GetMechanismInfo | * <code>[http://developer.mozilla.org/en/docs/FC_GetMechanismInfo FC_GetMechanismInfo]</code> | ||
* FC_InitToken | * <code>[http://developer.mozilla.org/en/docs/FC_InitToken FC_InitToken]</code> | ||
* FC_InitPIN | * <code>[http://developer.mozilla.org/en/docs/FC_InitPIN FC_InitPIN]</code> | ||
* FC_SetPIN | * <code>[http://developer.mozilla.org/en/docs/FC_SetPIN FC_SetPIN]</code> | ||
Session management functions | Session management functions | ||
* FC_OpenSession | * <code>[http://developer.mozilla.org/en/docs/FC_OpenSession FC_OpenSession]</code> | ||
* FC_CloseSession | * <code>[http://developer.mozilla.org/en/docs/FC_CloseSession FC_CloseSession]</code> | ||
* FC_CloseAllSessions | * <code>[http://developer.mozilla.org/en/docs/FC_CloseAllSessions FC_CloseAllSessions]</code> | ||
* FC_GetSessionInfo | * <code>[http://developer.mozilla.org/en/docs/FC_GetSessionInfo FC_GetSessionInfo]</code> | ||
* FC_GetOperationState | * <code>[http://developer.mozilla.org/en/docs/FC_GetOperationState FC_GetOperationState]</code> | ||
* FC_SetOperationState | * <code>[http://developer.mozilla.org/en/docs/FC_SetOperationState FC_SetOperationState]</code> | ||
* FC_Login | * <code>[http://developer.mozilla.org/en/docs/FC_Login FC_Login]</code> | ||
* FC_Logout | * <code>[http://developer.mozilla.org/en/docs/FC_Logout FC_Logout]</code> | ||
Object management functions: certificates and keys | Object management functions: certificates and keys | ||
* FC_CreateObject | * <code>[http://developer.mozilla.org/en/docs/FC_CreateObject FC_CreateObject]</code> | ||
* FC_CopyObject | * <code>[http://developer.mozilla.org/en/docs/FC_CopyObject FC_CopyObject]</code> | ||
* FC_DestroyObject | * <code>[http://developer.mozilla.org/en/docs/FC_DestroyObject FC_DestroyObject]</code> | ||
* FC_GetObjectSize | * <code>[http://developer.mozilla.org/en/docs/FC_GetObjectSize FC_GetObjectSize]</code> | ||
* FC_GetAttributeValue | * <code>[http://developer.mozilla.org/en/docs/FC_GetAttributeValue FC_GetAttributeValue]</code> | ||
* FC_SetAttributeValue | * <code>[http://developer.mozilla.org/en/docs/FC_SetAttributeValue FC_SetAttributeValue]</code> | ||
* FC_FindObjectsInit | * <code>[http://developer.mozilla.org/en/docs/FC_FindObjectsInit FC_FindObjectsInit]</code> | ||
* FC_FindObjects | * <code>[http://developer.mozilla.org/en/docs/FC_FindObjects FC_FindObjects]</code> | ||
* FC_FindObjectsFinal | * <code>[http://developer.mozilla.org/en/docs/FC_FindObjectsFinal FC_FindObjectsFinal]</code> | ||
Encryption functions: Triple DES and AES in ECB and CBC modes | Encryption functions: Triple DES and AES in ECB and CBC modes | ||
* FC_EncryptInit | * <code>[http://developer.mozilla.org/en/docs/FC_EncryptInit FC_EncryptInit]</code> | ||
* FC_Encrypt | * <code>[http://developer.mozilla.org/en/docs/FC_Encrypt FC_Encrypt]</code> | ||
* FC_EncryptUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_EncryptUpdate FC_EncryptUpdate]</code> | ||
* FC_EncryptFinal | * <code>[http://developer.mozilla.org/en/docs/FC_EncryptFinal FC_EncryptFinal]</code> | ||
Decryption functions: Triple DES and AES in ECB and CBC modes | Decryption functions: Triple DES and AES in ECB and CBC modes | ||
* FC_DecryptInit | * <code>[http://developer.mozilla.org/en/docs/FC_DecryptInit FC_DecryptInit]</code> | ||
* FC_Decrypt | * <code>[http://developer.mozilla.org/en/docs/FC_Decrypt FC_Decrypt]</code> | ||
* FC_DecryptUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_DecryptUpdate FC_DecryptUpdate]</code> | ||
* FC_DecryptFinal | * <code>[http://developer.mozilla.org/en/docs/FC_DecryptFinal FC_DecryptFinal]</code> | ||
Message digesting functions: SHA-1, SHA-256, SHA-384, and SHA-512 | Message digesting functions: SHA-1, SHA-256, SHA-384, and SHA-512 | ||
* FC_DigestInit | * <code>[http://developer.mozilla.org/en/docs/FC_DigestInit FC_DigestInit]</code> | ||
* FC_Digest | * <code>[http://developer.mozilla.org/en/docs/FC_Digest FC_Digest]</code> | ||
* FC_DigestUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_DigestUpdate FC_DigestUpdate]</code> | ||
* FC_DigestKey | * <code>[http://developer.mozilla.org/en/docs/FC_DigestKey FC_DigestKey]</code> | ||
* FC_DigestFinal | * <code>[http://developer.mozilla.org/en/docs/FC_DigestFinal FC_DigestFinal]</code> | ||
Signing and MACing functions: DSA, RSA, ECDSA, and HMAC | Signing and MACing functions: DSA, RSA, ECDSA, and HMAC | ||
* FC_SignInit | * <code>[http://developer.mozilla.org/en/docs/FC_SignInit FC_SignInit]</code> | ||
* FC_Sign | * <code>[http://developer.mozilla.org/en/docs/FC_Sign FC_Sign]</code> | ||
* FC_SignUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_SignUpdate FC_SignUpdate]</code> | ||
* FC_SignFinal | * <code>[http://developer.mozilla.org/en/docs/FC_SignFinal FC_SignFinal]</code> | ||
* FC_SignRecoverInit | * <code>[http://developer.mozilla.org/en/docs/FC_SignRecoverInit FC_SignRecoverInit]</code> | ||
* FC_SignRecover | * <code>[http://developer.mozilla.org/en/docs/FC_SignRecover FC_SignRecover]</code> | ||
Functions for verifying signatures and MACs: DSA, RSA, ECDSA, and HMAC | Functions for verifying signatures and MACs: DSA, RSA, ECDSA, and HMAC | ||
* FC_VerifyInit | * <code>[http://developer.mozilla.org/en/docs/FC_VerifyInit FC_VerifyInit]</code> | ||
* FC_Verify | * <code>[http://developer.mozilla.org/en/docs/FC_Verify FC_Verify]</code> | ||
* FC_VerifyUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_VerifyUpdate FC_VerifyUpdate]</code> | ||
* FC_VerifyFinal | * <code>[http://developer.mozilla.org/en/docs/FC_VerifyFinal FC_VerifyFinal]</code> | ||
* FC_VerifyRecoverInit | * <code>[http://developer.mozilla.org/en/docs/FC_VerifyRecoverInit FC_VerifyRecoverInit]</code> | ||
* FC_VerifyRecover | * <code>[http://developer.mozilla.org/en/docs/FC_VerifyRecover FC_VerifyRecover]</code> | ||
Dual-function cryptographic functions | Dual-function cryptographic functions | ||
* FC_DigestEncryptUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_DigestEncryptUpdate FC_DigestEncryptUpdate]</code> | ||
* FC_DecryptDigestUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_DecryptDigestUpdate FC_DecryptDigestUpdate]</code> | ||
* FC_SignEncryptUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_SignEncryptUpdate FC_SignEncryptUpdate]</code> | ||
* FC_DecryptVerifyUpdate | * <code>[http://developer.mozilla.org/en/docs/FC_DecryptVerifyUpdate FC_DecryptVerifyUpdate]</code> | ||
Key management functions | Key management functions | ||
* FC_GenerateKey | * <code>[http://developer.mozilla.org/en/docs/FC_GenerateKey FC_GenerateKey]</code>: DSA domain parameters (PQG), TLS pre_master key. | ||
* FC_GenerateKeyPair | * <code>[http://developer.mozilla.org/en/docs/FC_GenerateKeyPair FC_GenerateKeyPair]</code>: DSA, RSA, and ECDSA. Performs pair-wise consistency test. | ||
* FC_WrapKey | * <code>[http://developer.mozilla.org/en/docs/FC_WrapKey FC_WrapKey]</code>: RSA Key Wrapping | ||
* FC_UnwrapKey | * <code>[http://developer.mozilla.org/en/docs/FC_UnwrapKey FC_UnwrapKey]</code>: RSA Key Wrapping | ||
* FC_DeriveKey | * <code>[http://developer.mozilla.org/en/docs/FC_DeriveKey FC_DeriveKey]</code>: Diffie-Hellman, EC Diffie-Hellman, TLS PRF, TLS master key | ||
Random number generation functions | Random number generation functions | ||
* FC_SeedRandom | * <code>[http://developer.mozilla.org/en/docs/FC_SeedRandom FC_SeedRandom]</code>: Performs continuous random number generator test. | ||
* FC_GenerateRandom | * <code>[http://developer.mozilla.org/en/docs/FC_GenerateRandom FC_GenerateRandom]</code>: Performs continuous random number generator test. | ||
Parallel function management functions | Parallel function management functions | ||
* FC_GetFunctionStatus | * <code>[http://developer.mozilla.org/en/docs/FC_GetFunctionStatus FC_GetFunctionStatus]</code> | ||
* FC_CancelFunction | * <code>[http://developer.mozilla.org/en/docs/FC_CancelFunction FC_CancelFunction]</code> | ||
|} | |} | ||
|} | |} | ||
Revision as of 22:58, 20 July 2006
This is a draft document.
Specification of Roles
The NSS cryptographic module utilizes a single role approach -- this role, called NSS User, is a combination of both the User Role and the Crypto Officer Role. An NSS User utilizes secure services and is also responsible for the retrieval, updating, and deletion of keys from his key database.
The Crypto Officer role is assumed to install the NSS cryptographic module libraries. See Installation. The Crypto Officer must control the access to the module both before and after installation. Control consists of management of physical access to the computer executing the NSS cryptographic module code as well as management of the security facilities provided by the operating system.
Specification of Maintenance Roles
This section is not applicable to the NSS cryptographic module since it does not have a Maintenance Role.
Operator Authentication
Authentication Policy
The NSS cryptographic module uses Role-Based Authentication to control access to the module. To perform sensitive services using the cryptographic module, an operator must explicitly request to assume the NSS User role by logging into the module, and perform an authentication procedure using information unique to that operator (individual password). Role-based authentication is used to safeguard a user's private key information. However, Discretionary Access Control (DAC) is used to safeguard all other NSS User information (e.g., the public key certificate database). An NSS User may use a product (e.g., Mozilla Firefox) without establishing a personal private key -- e.g., they may utilize SSL Server Authentication without having a private key established. However, to enable SSL on a server product, a private key and public key certificate are required to enable secure services. An individual password is required in order to start the server -- this password is used to decrypt the private key.
Clearing of Previous Authentications on Power Off
The results of authentications are in memory, so they are automatically cleared when the process accessing the NSS cryptographic module terminates or the general purpose computer is powered off.
Protection of Authentication Data
The NSS cryptographic module doesn't store the user's password; instead, it stores a verifier for the user's password in the NSS key database. The NSS cryptographic module derives a Triple DES key from the user's password (using PKCS #5), encrypts the fixed string "password-check" (not including the terminating null byte) with the key, and stores the encrypted password check string as the verifier in the key database. It is computationally infeasible to obtain the password from the verifier. This protects against unauthorized disclosure and modification of the user's password.
Recall that all the private and secret keys stored in the NSS key database are encrypted with the same Triple DES key derived from the user's password. If an attacker gains access to the key database on a single-user system or can bypass the discretionary access control on the key database on a multi-user system, it is possible for the attacker to replace the encrypted password check string in the key database with a password check string encrypted with a key derived from his own password, effectively substituting his password for the user's password. Although the attacker will be able to log in to the NSS cryptographic module with his password, he won't be able to see any of the private and secret keys in the key database because he can't decrypt them.
Initialization of Authentication Mechanism
The operator (implicitly) assumes the Crypto Officer role when installing the NSS cryptographic module library files. Once the NSS cryptographic module library files are installed on the system, the Crypto Officer calls the function FC_InitPIN to set the NSS User's initial password. From then on, the operator only assumes the NSS User role.
FC_InitToken to initialize the NSS cryptographic module. The NSS cryptographic module is initialized automatically when FC_Initialize is called for the first time. The Crypto Officer may call FC_InitToken to re-initialize the NSS cryptographic module.Since the NSS cryptographic module does not use a factory-set or default password to authenticate the operator for the first time the module is accessed, login to the general purpose computer is used to control access to the module before it is initialized. If the general purpose computer is not protected with a system login password, procedural controls or physical access control must be used to control access to the computer before the module is initialized.
Change of Authentication Data
To change the password, call the function FC_SetPIN with both the old password and the new password as arguments.
Strength of Authentication Mechanism
In FIPS mode, the NSS cryptographic module imposes the following requirements on the password.
- The password must be at least seven characters long.
- The password must consist of characters from three or more character classes. We define five character classes: digits (0-9), ASCII lowercase letters, ASCII uppercase letters, ASCII non-alphanumeric characters (such as space and punctuation marks), and non-ASCII characters. If an ASCII uppercase letter is the first character of the password, the uppercase letter is not counted toward its character class. Similarly, if a digit is the last character of the password, the digit is not counted toward its character class.
(These requirements are enforced by the function sftk_newPinCheck, which is called by the functions FC_InitPIN and FC_SetPIN.)
To estimate the probability that a random guess of the password will succeed, we have to make some assumptions about the probability distribution of the individual characters of the password and their joint probabilities. We assume that
- the characters of the password are mutually independent, and
- the probability of guessing an individual character of the password is < 1/10.
Since the password is >= 7 characters long, the probability that a random guess of the password will succeed can be estimated as follows.
Let Pr(G) be the probability that a random guess of the password succeeds.
Let pn be the probability that the password is n characters long.
Let Pr(G|n) be the conditional probability that a random guess of the
password succeeds, given that the password is n characters long.
Our assumptions imply that Pr(G|n) <= (1/10)^n, and that
Pr(G|m) < Pr(G|n) if m > n. (Intuitively, it is harder to guess a
longer password.) Since the events that the password is n characters
long, for all n >= 7, are mutually exclusive, we have
Pr(G) = Pr(G|7)*p7 + Pr(G|8)*p8 + Pr(G|9)*p9 + ...
< Pr(G|7)*p7 + Pr(G|7)*p8 + Pr(G|7)*p9 + ...
= Pr(G|7)*(p7 + p8 + p9 + ...)
= Pr(G|7)
<=(1/10)^7 = 1/10,000,000.
This exceeds the requirement AS03.25 that the probability shall be less than one in 1,000,000.
After each failed authentication attempt in FIPS mode, the NSS cryptographic module inserts a one-second delay before returning to the caller, allowing at most 60 authentication attempts during a one-minute period. (See the PR_Sleep(loginWaitTime) calls in the functions NSC_SetPIN and NSC_Login.) Therefore, the probability of a successful random guess of the password during a one-minute period is < 60 * 1/10,000,000 = 0.6 * (1/100,000). This exceeds the requirement AS03.26 that the probability shall be less than one in 100,000.
Feedback of Authentication Data
The NSS cryptographic module has four PKCS #11 functions that take passwords as input arguments:
FC_InitToken:FC_InitTokeninitializes or re-initializes the token. ThepPinargument is the Security Officer's initial password. (The Security Officer in PKCS #11 is roughly equivalent to the crypto officer in FIPS 140-2.)FC_InitTokenignores thepPinargument because the NSS cryptographic module doesn't have a crypto officer role.FC_InitPIN:FC_InitPINinitializes the user's password. ThepPinargument is the user's initial password.FC_SetPIN:FC_SetPINchanges the user's password. ThepOldPinargument is the user's old password, and thepNewPinargument is the user's new password.FC_Login:FC_Loginlogs the user into a token. ThepPinargument is the user's password.
When passwords are passed to these functions as input arguments, there is no visible display of the passwords, and the only feedback mechanism is the function return value. The function return value gives away the following information about the password:
- whether the entered password is correct (
CKR_OK) or incorrect (CKR_PIN_INCORRECT); - (when initializing or changing passwords) whether the new password contains invalid characters (
CKR_PIN_INVALID), is too weak (CKR_PIN_LEN_RANGE), or is good (CKR_OK).
The function return value does not provide information that could be used to guess or determine the user's password.
Multiple Concurrent Operator Roles and Services
The NSS cryptographic module doesn't allow concurrent operators.
- For Security Level 1, the operating system has been restricted to a single operator mode of operation, so concurrent operators are explicitly excluded (FIPS 140-2 Sec. 4.6.1).
- On a multi-user operating system, this is enforced by creating the NSS certificate and key databases with the 0600 access permission bits.
Note: The NSS cryptographic module does allow concurrent processes with the same user identity to access the module, with the restriction that all the concurrent processes must open the NSS databases in read-only mode. Each process accessing the NSS cryptographic module needs to assume a role separately. The separation between the roles and services performed by concurrent processes is enforced by the process protection of the underlying operating system.
The NSS cryptographic module also allows a process to open multiple concurrent sessions (connections) with the module. PKCS #11 requires that when a session within a process assumes a role, all the concurrent sessions within the process assume that role (PKCS #11 v2.20, Sec. 11.4, C_Login). Therefore, the separation of the roles assumed by concurrent sessions and the corresponding services isn't an issue.
Specification of Services
Since there is only one role, the user has access to ALL the services. Routines have been specified for each service and denoted whether they are public, meaning that they require no authentication to utilize, or private, meaning that authentication must be provided before the routine is utilized. This model allows a type of safety state by allowing a NSS user to log out (thus disallowing any access to private services) without ending the session, and then log back in to re-authenticate private services rendered by the cryptographic module. All public and private services are listed in the following table:
Table II. Services
|
Name of Service |
Description of Service in Terms of Routines | ||
|---|---|---|---|
| PKCS #11 |
|
Show Status
The following PKCS #11 functions output the current status of the NSS cryptographic module:
FC_GetTokenInfo: it fills in theCK_TOKEN_INFOstructure with the following information:flags: bit flags indicating status of the NSS cryptographic moduleCKF_WRITE_PROTECTED (0x00000002): true if the token is write-protected.CKF_LOGIN_REQUIRED (0x00000004): true if there are some cryptographic functions that a user must be logged in to performCKF_USER_PIN_INITIALIZED (0x00000008): true if the user's password has been initialized.Note: the NSS cryptographic module does not use the relatedCKF_TOKEN_INITIALIZED (0x00000400)flag because the module is never in the uninitialized state.FC_Initializeautomatically initializes the module if it is not initialized.
ulSessionCount: number of sessions that this application currently has open with the NSS cryptographic moduleulRwSessionCount: number of read/write sessions that this application currently has open with the NSS cryptographic module
FC_GetSessionInfo: If the NSS cryptographic module is in the error state,FC_GetSessionInforeturnsCKR_DEVICE_ERROR. Otherwise, it fills in theCK_SESSION_INFOstructure with the following information:state: the state of the session, i.e., no role is assumed, the User role is assumed, or the Crypto Officer role is assumedflags: bit flags that define the type of sessionCKF_RW_SESSION (0x00000002): true if the session is read/write; false if the session is read-only.
Perform Self-Tests
An operator who is already logged in can initiate and run the power-up self-tests by logging into the module again with a call to the PKCS #11 function FC_Login.
Bypass Capabilities
The NSS cryptographic module has no bypass capability.