¿Qué tipo de matemáticas son posibles en una tarjeta inteligente?

3

Estoy interesado en programar números primos en un campo de elemento en una tarjeta inteligente.

¿Dónde puedo obtener información sobre las "entradas" y "salidas" de una tarjeta inteligente para poder llamar desde una aplicación personalizada?

La matemática que necesito hacer es:

 ( (BigInteger * BigIntegerA)/BigInteger) + BigIntegerB

Necesito mantener en secreto a BigInteger A y B, y residir en el dispositivo.

    
pregunta TLDR 18.02.2017 - 23:32
fuente

1 respuesta

2

Una tarjeta inteligente es un dispositivo informático general que es Turing complete ; básicamente es un sistema en un chip (SoC) con una cantidad limitada de entradas / salidas. Entonces, en principio, puedes calcular cualquier cosa con una tarjeta inteligente.

Sin embargo, la aritmética

BigInteger (bignum) es complicada en procesadores tan pequeños. Muchas tarjetas inteligentes son dispositivos informáticos de 16 u 8 bits (aunque ARM de 32 bits está haciendo algunas incursiones incluso allí). Esto es problemático para cálculos con números grandes, como la multiplicación y la división. La adición se puede implementar fácilmente en cualquier CPU, por supuesto, es muy fácil extender las adiciones de 8 o 16 bits a una adición de N bits para cualquier N. grande

Por esta razón, muchas tarjetas inteligentes contienen un coprocesador que contiene un multiplicador de Montgomery, que se utiliza principalmente para realizar criptografía asimétrica, como los cálculos de RSA y ECC (curva elíptica). La disponibilidad de este coprocesador para cálculos de propósito general depende del sistema operativo. La tarjeta Java, por ejemplo, contiene una interfaz bignum opcional, pero esta interfaz no suele implementarse.

Con este tipo de cálculos es probable que necesite acceso de bajo nivel al coprocesador. Si desea mantener en secreto A y B, también debe tener en cuenta el análisis de canal lateral (DPA y tiburones con láseres: LFI), por lo que si desea realizar los cálculos usted mismo está en peligro.

Las entradas y salidas se pueden realizar utilizando la interfaz APDU normal, que es la predeterminada para casi cualquier tarjeta inteligente. Sin embargo, es posible que necesite una APDU de longitud extendida o encadenada, si sus valores de entrada o salida son lo suficientemente grandes (255 bytes es la entrada máxima predeterminada, 256 bytes la salida máxima predeterminada).

La forma en que se programa la tarjeta inteligente depende del sistema operativo de la tarjeta inteligente. Java Card + Global Platform es el valor predeterminado para la mayoría de las aplicaciones de fabricantes independientes , pero tiene una API de nivel relativamente alto (a menudo extendida con API propietarias).

    
respondido por el Maarten Bodewes 19.02.2017 - 22:28
fuente

Lea otras preguntas en las etiquetas