On 8/13/2012 12:36 PM, JC wrote:
> I have some elementary questions concerning the usage of smart cards. They 
> will probably be way too basic for members of this forum; maybe even 
> inappropriate. My hope is that contributors to this forum with the necessary 
> expertise will be able to point me in the right direction so I can carry on 
> researching this subject further. Please, bear with me and my ignorance.
>

Yes these are very elementary.

> I am particularly interested in the Common Access Card (CAC) used by the 
> military (and others) to provide a two-factor authentication mechanism. My 
> understanding is that the factors are something that you know (a PIN to 
> unlock the card) and something that you have (the card itself.) Access to the 
> card takes place by means of some specialized hardware - a card reader.
>

The military CAC cards are being converted dual CAC and PIV cards using the NIST
PIV standards. I suggest that you read NIST FIPS-201 (or NIST FIPS 201-2 draft)
and NIST 800-73-3 to see what the U.S. Government is doing with smart cards.

> I believe that the card reader may be physically connected to the device 
> (server, computer, whatever one calls it) for which the smart card-provided 
> authentication is required. Alternatively, the card reader may be provide 
> authentication over the network. Let me go over these two cases, which I will 
> refer to as cases 1 and 2, respectively

Much of what you want to do is already developed, with USB card readers,
PC/SC card reader drivers, and vendor or open source middleware
such as OpenSC or Coolkey, that can talk to applications using CAPI on Windows
or PKCS#11 on any sustem. For example Mozilla "Security Devices"
are PKCS#11 shared libs, that use the pcscd daemon to access CCID card readers,
that that access the smartcard.

Smart cards can be used with HTTPS via TLS for authentication.

Windows 7 has built in support for PIV cards and pcsc, and IE and Outlook
can use them as well as other applications.
And in a Windows Domain the PIV can be used for login to AD. (The Kerberos
PKINIT protocol is used here and can work on Linux too.)

> Case 1: I will refer to the card reader as CR, and to the server it is 
> physically connected to as S. CR will allow a smart card user U to be 
> authenticated in S. U inserts his or her CAC into CR. U is prompted for a 
> PIN. Assuming the PIN punched in is correct, the CAC is unlocked. At this 
> point CR will interact with S via some specialized application in S. This 
> application must use a driver specifically developed for the CR hardware and 
> whatever operating system (loosely speaking) that is used to control S. 
> Assuming that this driver is in place and working correctly, what is the 
> information exchanged between CR and S? I understand that the CAC uses X.509 
> certificates. How does the information exchange take place? My guess: S will 
> access certificate information from the CAC using some cryptographic API 
> (PKCS-11 seems to be a common one.) Each CAC will have an X.509 certificate 
> assigned to it that has been signed by some certificate authority (CA) that 
> must
>   be known to S in advance. Essentially, S will use the appropriate CA 
> certificate (which it will typically retrieve form local storage) in order to 
> verify the X.509 certificate associated with the CAC in question that S has 
> retrieved from CR. The verification may be a chained one.
>
> Is this a more or less accurate description, or am I totally off the bull's 
> eye?

NIST 800-73-3 part 1 Appendix B has some nice diagrams of using a card for
authentication, with and without the PIN.

Most cards need the PIN sent to the card, either via the application prompting
for the PIN and sending it to the card, or by using a card reader
with a build in pin pad reader, thus avoiding the application and host OS
from seeing the PIN. (Not all middle ware of applications support pin pad 
readers.)

The application either locally or the  server at the other end of the network
such as TLS or PKINIT verify the certificate.

>
> Case 2: The setup here would be the following: A card reader CR physically 
> connected to some device D (typically, but not necessarily, a PC) that can 
> connect to some remote server S through some secure transport mechanism. The 
> interaction wold be similar to the one described above, the difference being 
> that D mediates the authentication. I.e. D will retrieve the CAC's 
> certificate through interaction with CR, and will pass it on to S by means of 
> the transport mechanism used by D to connect to S. The most straightforward 
> one I can think of would be SSL/TLS: Once D has got the CAC's certificate C 
> from CR, it will use C to start an SSL/TLS handshake with S. S will use 
> standard SSL/TLS mechanisms to verify C. If this verification succeeds then 
> the owner of CAC will be allowed to establish an SSL/TLS session with S. It's 
> obvious that the example that I have in mind consists of establishing an 
> HTTPS connection from a PC to some HTTPS server S.
>

The real difference in these two cases is trust of the reader. Over the network
only the card can be trusted. For a physical access like a door reader, the
reader can also be trusted by the door.

The piece you are missing in these cases is not only is the
certificate verified, but an application like the TLS server as part of the
TLS handshake send some nonce that is to be sent to the card to be signed
by the private key on the card, thus proving that card has been unlocked by
the pin, and the private key was used to to sign the nonce.

In the PIV documents "Logical Access" is the term used for this
over the network type of authentication.


> Again, is this a correct description?
>
> Feedback on this will be much appreciated. Again, if this is not the right 
> forum for these questions, I will be most thankful if somebody could point me 
> to the appropriate forum(s).
> _______________________________________________
> opensc-devel mailing list
> opensc-devel@lists.opensc-project.org
> http://www.opensc-project.org/mailman/listinfo/opensc-devel
>
>

-- 

  Douglas E. Engert  <deeng...@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444


_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to