Autenticação no site usando cartão inteligente em python

8

Então, eu tenho um cartão inteligente fornecido pela empresa que parece um cartão de crédito com um chip. Este cartão efetua login em um site após o cartão ser inserido no leitor de cartões.

Agora eu tenho que escrever um programa em python que possa ler o cartão e fazer login nesse site usando o Requestsmódulo Tentei descobrir como recuperar esses dados de autenticação do cartão usando o script python e, em seguida, usar esses dados, mas tenho sucesso parcial. Eu instalei o pyscard:

from smartcard.System import readers
from smartcard.util import toHexString

r=readers()
print(r)

connection = r[0].createConnection()
connection.connect()
SELECT = [0xA0, 0x88, 0x00, 0x00] # CLA, INS, P1, P2
DF_TELECOM = [ 0x02, 0x7F, 0x10]  # Lc, Data, Le
data, sw1, sw2 = connection.transmit( SELECT + DF_TELECOM )

Até agora, sou capaz de transmitir dados e recuperar alguns dados do cartão. Enviei o comando 88 no INS (fonte: ISO 7816), que é para algum tipo de autenticação interna (suponho que esses dados de autenticação sejam usados ​​para fazer login no site), mas recebo a resposta abaixo:

data = []
sw1 = 110
sw2 = 00

Não consegui encontrar o significado dessa resposta na ISO 7816. Alguém pode me dizer se tenho a abordagem correta ou sugestão para prosseguir daqui? Em suma, quero saber como fazer login no site usando script python e cartão inteligente?

Anudocs
fonte
Sua resposta é basicamente 6E00, o que significa "Classe não suportada". Minha pergunta é "Você sabe qual é esse cartão?". Você pode compartilhar aqui o ATR do cartão.
vikky 12/02
Aqui está o ATR: 3B D2 18 00 81 31 FE 58 C9 03 16. Mas eu não sei como isso vai ajudar?
Anudocs
ATR é apenas para saber sobre o cartão. Você tem algum guia da APDU para comunicação.
vikky 12/02
Não. BTW é o caminho certo para autenticar webiste?
Anudocs
Seu cartão está usando o CardOS 5.x? Se sim, você já viu isso? github.com/OpenSC/OpenSC/issues
vida é complexa

Respostas:

0

Basicamente, a resposta que você está recebendo é essencialmente "6E00", que significa "Classe não suportada", basta substituir o valor "INS" por 0x00 e você deve ficar bem

bluejayke
fonte