Protecting RPs and users from unauthorised token changesJust an observation when investigating VeriSign Labs' (superb) support for the OpenID "PAPE" specification: I'm specifying that my site requires VeriSign to authenticate the user with two-factor physical security: http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical This works well. If I authenticate successfully with my VeriSign One Time Password (OTP) token then I get the following responses as confirmation that the user was authenticated as requested: http://schemas.openid.net/pape/policies/2007/06/multi-factor http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical Note that if I choose "Click here if you don't have your VIP credential." and use the fact that I have access to my email account to authenticate me then it only comes back with: http://schemas.openid.net/pape/policies/2007/06/multi-factor This seems like the correct behaviour to me. The system is saying that even though I requested physical token authentication, it didn't do it this time. My question is based on the following scenario:
While there is certainly a need to handle the lost tokens use case, sending a one time password to the user's registered email address is not secure enough. If the user has a trojan or virus on their PC which is key logging, it's very likely that if it's captured the user's VeriSign password, it's also captured the user's email address and password. From this point onwards, the Hacker can sign in as the user and receive the following PAPE response: http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical There is a physical token associated with the account, it just isn't the user's physical token! Currently, these responses are provided: auth_time:2009-04-28T07:55:26Z nist_auth_level:0 auth_policies:http://schemas.openid.net/pape/policies/2007/06/multi-factor http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical Potential solutionsAs stated earlier, the lost token use case is a valid one and it needs to be accounted for. It's an exceptional event, though, and relying parties would benefit from being able to detect and take action following the loss.One way around the problem is to severely restrict the token recovery procedure, like potentially eliminating the email and only have an SMS type delivery. At least the SMS is out-of-band from the user's PC and so this significantly reduces the chances that a hacker can get hold of the One Time Password when it's sent through. This reduces convenience for the user and won't work for users that are using their mobile phone as the OTP token using VeriSign Mobile.Another approach is to include in the OpenID response details of the token that was used to provide the One Time Password. This allows Relying Parties to at least detect that the user has changed their token and should kick-off a process of keeping an eye out for potential fraud. There's no way that the Relying Party can tell the difference between a On a protocol level, this would be communicated as an openid.pape.auth_level.<cust> response parameter, but the PAPE specification states "A custom Assurance Level definition MAY define additional subparameter values that are expressed within its namespace, although for reasons of simplicity, this SHOULD be avoided if possible." Providing OTP token details in the response could constitute a leak of user information. Rather than providing the OTP's serial number, a one-way hash of it (or just some other arbitrary generated and stored identifier for the token) would be fine. The exact scenario I'm picturing is Internet banking and my suggested workflow would be:
At this stage, ABC bank should be able to see that the user's OTP token has changed and can decide whether to:
The bank may choose not to do any of those things but it should have the option to perform a check. Why doesn't this problem exist with all OTP token systems?The difference is that if you have 5 bank accounts you have 5 bank cards. If you lose your HSBC bank card, it's HSBC that sends a new one in the post to you. That's not necessarily the case for the VeriSign OTP token. Any of the 5 banks or Paypal, or Verisign directly may issue the replacement token and won't notify any of the other banks. Changing the OpenID PAPE specificationIt looks like there already some proposals for extensions to the OpenID PAPE specification being considered. These extensions concern optionally specifying what type of authentication policy has been exacted on the user in a less general way than just saying "anti-phishing" or "physical token". It may be worth adding in a requirement to identify the token being used. Actions that a user can take if their account is compromisedIf a user has their account compromised then a hacker can potentially gain access to tens of systems with the same credentials. The OpenID account is much more difficult to steal than an individual website account, but the workflow that the user must follow when a breach has occurred should be defined. This section (when finished) will try to define this workflow. |