PKCS#11は、暗号処理を行うデバイスやライブラリを「みんな同じように操作できるようにする」ためのAPI仕様です。
「暗号ハードウェアやソフトウェアを叩くための共通言語」です。
つまり、暗号処理の基本動作をハードウェア依存せずに行うための標準化されたC言語ベースのAPI仕様です。
PKCS#11は特にHSM (Hardware Security Module) や スマートカード, TPM などの「秘密鍵を外に出さない」タイプのデバイスと相性が良いです。
これらの機器はセキュリティのため、鍵を外部に持ち出せない設計ですが、PKCS#11経由なら外部アプリから安全に使えます。
[アプリケーション]
↓ (PKCS#11 API呼び出し)
[PKCS#11ライブラリ(.so/.dll)]
↓ (デバイス固有のやり取り)
[HSM / スマートカード / 暗号モジュール]
アプリはPKCS#11のAPIを叩くだけで、下の機器が何であっても同じコードで動く、というメリットがあります。
C_Initialize
/ C_Finalize
C_OpenSession
/ C_CloseSession
C_GenerateKey
/ C_GenerateKeyPair
C_Sign
/ C_Verify
C_Encrypt
/ C_Decrypt