• No se han encontrado resultados

Implementación de una firma digital en un sistema embebido de 32 bits

N/A
N/A
Protected

Academic year: 2020

Share "Implementación de una firma digital en un sistema embebido de 32 bits"

Copied!
22
0
0

Texto completo

(1)IMPLEMENTACIÓN DE UNA FIRMA DIGITAL EN UN SISTEMA EMBEBIDO DE 32 BITS IMPLEMENTATION OF A DIGITAL SIGNATURE IN A 32 BITS EMBEDDED SYSTEM Juan Camilo Ramírez González Ing. Edwar Jacinto Gómez Ms.c. Resumen: La firma digital es un método de cifrado asimétrico que usa un par de claves que deben estar relacionadas entre sí, permite al receptor de un mensaje verificar la autenticidad del origen de la información, así como verificar que dicha información no ha sido modificada desde su generación. De este modo, la firma digital ofrece el soporte para la autenticación e integridad de los datos, así como para el no repudio en origen, ya que el originador de un mensaje firmado digitalmente no puede argumentar que no lo es. En este artículo se analizará los aspectos que conforman una firma digital, función hash, algoritmo para la generación de claves RSA, que es usado tanto para cifrar como para firmar. La implementación de la firma se llevó a cabo en la plataforma embebida PSoC 6 [1] , plataforma de bajo de costo la cual cuenta con la arquitectura necesaria para la implementación de los algoritmos, y en la cual se analizarán una serie de métricas de interés como cantidad de memoria SRAM usada, memoria Flash y tiempos de respuesta de la aplicación. Palabras clave: Criptografía, sistemas embebidos, seguridad informática..

(2) Abstract: The digital signature is an asymmetric encryption method that uses a pair of keys that must be related to each other, allow the recipient of a message to verify the authenticity of the origin of the information, as well as verify that said information has not been modified from your generation In this way, the digital signature offers the support for the authentication and integrity of the data, as well as the origin not origin, the origin of a digitally signed message cannot argue that it is not. In this article, we will analyze the aspects that make up a digital signature, hash function, algorithm for the generation of RSA keys, which is used both to encrypt and to sign. The implementation of the signature was carried out on the embedded PSoC 6 platform [1], a low-cost platform which has the necessary architecture for the implementation of the algorithms, and in which a series of metrics of interest will be analyzed as amount of SRAM memory used, flash memory and application response times. Keywords: Cryptography, embedded systems, computer security. 1. Introducción Una función criptográfica hash es un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija. Independientemente de la longitud de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud. El algoritmo de hash seguro se utiliza para asegurar los datos, Integridad y autenticidad mientras se almacenan y transfieren. Uno de ellos es el SHA-256, un algoritmo hash que actualmente está ejecutando un papel importante en diversas aplicaciones. Casi todas las transacciones y diseños de alto rendimiento de los esquemas de seguridad [2]..

(3) RSA fue desarrollado por Rivest, Shamir y Adleman en 1978. RSA utiliza dos claves, privada y pública, donde la clave privada se mantiene secreto y la clave pública se publica en público. Una clave se puede utilizar para el cifrado y la otra es utilizada para el descifrado. La seguridad de RSA se basa en la dureza de factorizar enteros primos grandes. Hasta la fecha, se ha considerado que la factorización de enteros primos grandes es un problema difícil, por lo tanto, RSA es seguro actualmente, el módulo RSA debe tener una longitud de 1024 bits o mayor para que se considere seguro [3]. Este documento tiene como fin abordar la implementación del algoritmo de hash seguro SHA-256 para crear un resumen de mensaje, la implementación del algoritmo de cifrado asimétrico RSA para firmar y validar los datos, y el rendimiento de estos al ser implementados en una plataforma embebida. 2. SHA-256 La función de comprensión SHA-256 está representada por el siguiente diagrama. Figura 1.. Figura 1. Función de comprensión SHA-256. Fuente: [4]..

(4) El cálculo se divide en dos pasos: El primer paso es pre-procesar los mensajes originales. Implica el relleno de mensajes y la ampliación del mensaje para el cálculo redondo. El relleno significa la adición de bits de acuerdo con algunas reglas hasta que la longitud total es entero de 512-bits. Después cada 512-bits se expandirá a 64*32 bits para computación de rondas SHA-256 [4]. y el cálculo se hace con 6 operaciones lógicas iterativas. 𝜎0 256 (𝑥) = 𝑅𝑂𝑇𝑅 7 (𝑥) ⊕ 𝑅𝑂𝑇𝑅18 (𝑥) ⊕ 𝑆𝐻𝐴3 (𝑥). (1). 𝜎1 256 (𝑥) = 𝑅𝑂𝑇𝑅17 (𝑥) ⊕ 𝑅𝑂𝑇𝑅19 (𝑥) ⊕ 𝑆𝐻𝐴10 (𝑥). (2). Como se muestra en la figura 1 ,el calculo redondo mostrado en la parte izquierda, es obtener el "a"~"h", que son 8 vectores de 32 bits, por lo que se obtedra al final un resumen de 8 x32 =256 bits. La primera ronda de a, b, c, d, e, f, g y h son asignadas por el valor inicial de SHA-256,𝐾𝑡 representa 64 constantes de 32 bits , y las cuatro funciones de cálculo se muestran en las ecuaciones(3,4,5 y 6).Las constantes empleadas en SHA 256 ,0,1…….,63, en formato hex se muestran en [5]. 𝐶ℎ(𝑥, 𝑦, 𝑧) = (𝑥^ 𝑥 ) ⊕ (¬𝑥 ^ 𝑧). (3). 𝑀𝑎𝑗(𝑥, 𝑦, 𝑧) ← (𝑥^ 𝑦 ) ⊕ (𝑥 ^𝑧) ⊕ (𝑦 ^ 𝑧). (4). 2 13 22 ∑256 0 (𝑥) = 𝑅𝑂𝑇𝑅 (𝑋) ⊕ 𝑅𝑂𝑇𝑅 (𝑋) ⊕ 𝑅𝑂𝑇𝑅 (𝑋). (5). 6 11 25 ∑256 1 (𝑥) = 𝑅𝑂𝑇𝑅 (𝑋) ⊕ 𝑅𝑂𝑇𝑅 (𝑋) ⊕ 𝑅𝑂𝑇𝑅 (𝑋). (6). La salida final se obtiene por el valor de la matriz de la 64ª ronda y su resumen será: 𝑠𝑎𝑙𝑖𝑑𝑎 = 𝐻0 , 𝐻1 , 𝐻2 , 𝐻3 , 𝐻4 , 𝐻5 , 𝐻6 , 𝐻7. (7).

(5) 3.Implementación de SHA-256 en el modulo criptografico de PSoC 6. La aplicación se implemento en PSoC 6 BlE Pionner kit .Figura 3.. Figura 2.PSoC 6 BlE Pionner kit [1]. Características. Tabla 1.PSoC 6 .Fuente:[1]. Todos los algoritmos criptográficos funcionan con una estructura cliente-servidor [6], PSoC 6 cuenta con dos procesadores de 2 núcleos, M4 Y M0+ y cualquiera puede ejecutar cualquiera de las dos tareas. El cliente se encargará de enviar los datos del mensaje y el servidor los procesará para la operación criptográfica deseada. El siguiente diagrama representa el funcionamiento de SHA-256 sobre el modulo criptográfico (Figura 3)..

(6) Figura 3.Diagrama SHA-256 en PSoC 6. Fuente: propia. El software PSoC creator cuenta con una librería de controlador de periféricos PDL,en este caso se usó las librerías “cy_crypto.h” y “cy_crypto_server.h”. ,según el algoritmo. criptográfico que se va a usar hay que hacer una serie de configuraciones por lo que hay que leer el manual de usuario. La implementación del codigo consiste en crear un proyecto en el IDE PSoC creator y su respectiva digitación en codigo C, aplicando la teoría del algoritmo SHA-2 anteriormente explicado. 3.1 Guía de inicio Antes de empezar hay que hacer unas configuraciones para que la aplicación pueda funcionar correctamente. 1. En la parte superior de PSoC creator ir a Project > Build Settings > Peripheral driver library y activar la librería Crypto, para poder empezar a usar las funciones criptográficas (Figura 4)..

(7) Figura 4.Librería Crypto. Fuente : propia. 2.Si hay librerías que aun así no reconoce, ir a Project > Build Settings > CM4 ARM > Linker > General y en “Additional libraries“ agregar “h” que es la extensión de las librerías (figura 5).. Figura 5.Librerías adicionales. Fuente : propia. 3.Garantizar que la ruta de instalación de Peripheral Driver library es la correcta y que tiene la última versión instalada, ir a tools > options > Project Management > PDL V3 (PSoC 6.

(8) devices) y asegurar que la ruta sea la misma que la de PSoC creator o no funcionara correctamente. 4. Al momento de compilar elegir el procesador correcto, el cual es el que tiene la función principal (Figura 6).. Figura 6.Compilador. Fuente : propia 3.2 Código fuente SHA-256 Librerías necesarias para el desarrollo de la aplicación.. Figura 7. Librerías firma digital. Fuente: Propia. La base para la lectura del mensaje es básicamente la definición de 3 tipos de datos para rastrear la máquina de estado que acepta el mensaje de usuario. Figura 8.. Figura 8. Definición de datos. Fuente: Propia..

(9) Figura 9. Función Principal. Fuente. Propia INGRESAR_MENSAJE, Se encarga de recibir el mensaje digitado por el usuario, MENSAJE_NO_LEIDO por si el mensaje no pudo leerse de ninguna forma o excede el tamaño de caracteres que se puede ingresar (Figura 9).. Figura 10.SHA-256 en PSoC 6. Fuente: Propia. En el caso que el mensaje sea leído, se inicializara el bloque criptográfico, el hash se calcula mediante la función Cy_Crypto_Sha_Run(),y hay que rellenarse de la siguiente manera, mensaje declarado como entero con longitud 4 bytes , tamaño del mensaje que por defecto no puede exceder los 150 caracteres pero que se puede modificar, y función hash que se encargara de transformar el bloque arbitrario de datos en una nueva cadena de caracteres de longitud fija (Figura 10)..

(10) 3.3. Familia SHA-2 Existen algoritmos hash más fuertes que pertenecen a la familia de SHA 256, como SHA384 y SHA-512, que pueden manejar longitud de palabras de 64 bits y realizan 80 rondas, actualmente el modulo criptográfico solo soporta hasta SHA-256, por lo que las firmas solo se pueden generar con este hash. 4.Firma digital RSA-PSS bajo estándar PKCS #1 v2.2. El propósito de este estándar es proporcionar un esquema con apéndices que consisten en operaciones para la generación y validación de firmas digitales, donde la generación de la firma se produce firmando con la llave privada RSA y la validación se realiza usando la respectiva llave publica asociada [7]. El algoritmo RSA básicamente puede dividirse en 4 partes: Generación de claves, cifrado, descifrado y firma digital. 4.1. Generación de claves RSA El primer paso es buscar 2 números primos muy grandes p y q, siendo p ≠ q. a partir de estos números se halla el modulo n, que es el resultado del producto entre los números p y q. 𝑛 = (𝑝 ∗ 𝑞). (8). El segundo paso es usar la función totient de Euler, para calcular el indicador Φ [8]. 𝛷 = (𝑝 − 1) ∗ (𝑞 − 1). (9). el tercer paso es elegir un valor de clave pública e, tal que e sea mayor a 1 y menor que Φ ,se sugiere los números : 3, 5, 17, 257 o 65537 por IEEE [9,10]. 1<e< Φ. (10).

(11) Para asegurar que exista el inverso multiplicativo y la clave privada inversa de la clave pública se debe cumplir que el máximo común divisor entre Φ y e sea igual a 1.. MCD (𝑒, 𝛷) =1. (11). Para hallar el valor de clave privada d, se usa el algoritmo extendido de Euclides para hallar el inverso multiplicativo [11]. 𝑑 = 𝑖𝑛𝑣(𝑒, 𝛷). (12). con lo anterior se llega a que las claves son: Clave pública: (𝑒, 𝑛). (13). Clave privada:(𝑑, 𝑛). (14). 4.2 cifrado RSA Para cifrar datos con RSA se emplea la clave pública (13), y se cifran con la siguiente ecuación: 𝐶 = 𝑀𝑒 𝑚𝑜𝑑 𝑛. (15). Para descifrar los datos se emplea la clave privada (14), y se descifran con la siguiente ecuación: M = 𝐶 𝑑 𝑚𝑜𝑑 𝑛. (16). 4.3. Firmando un mensaje con RSA Para firmar con RSA se emplea la clave privada (14) sobre un resumen creado por una función hash [2], mediante la siguiente ecuación: 𝐶 = 𝐻(𝑀)𝑑 𝑚𝑜𝑑 𝑛 =. Firma digital. (17). Donde H(M) es el resumen del mensaje. Para comprobar la firma se emplea la clave pública (13), y se calcula mediante la siguiente ecuación: 𝐶 𝑒 𝑚𝑜𝑑 𝑛 =. comprobación de la firma. (18).

(12) 5.Generación y validación de firma digital RSA en PSoC 6. 5.1 Diagrama firma digital en PSoC.. Figura 11. Firma digital. Fuente: propia.. 5.2 Generación de claves Para la creación de claves, se requiere dos softwares adicionales los cuales son: Open SSL [12] y Python 2.7 o 3 [13]. Con el siguiente comando en OpenSSL se genera la clave privada RSA : ●genpkey. –algorithm. RSA. –pkeyopt. rsa_keygen_bits:2048. rsa_keygen_pubexp: 65537 -out RSA_PRIVATE.txt. –pkeyopt.

(13) Figura 12. clave privada RSA. Fuente: Propia. Con el siguiente comando se extrae la clave pública de la clave privada: ●rsa –in RSA_PRIVATE.txt –pubout > RSA_PUBLIC.TXT. Figura 13. clave pública RSA. Fuente: Propia. Scripts proporcionados La instalación de la librería PDL proporciona dos scripts para convertir la salida de OpenSSL a un formato compatible con C y estructuras utilizadas por la imagen segura para almacenar la clave pública. Estos scripts están disponibles en la ruta donde se realizó la instalación, cypress proporciona un guía para generar las claves [14]. Como las claves se generaron de forma manual solo hay que usar el script rsa_to_c.py, copiarlo en un directorio de trabajo y ejecutarlo, quedara un archivo de texto llamado rsa_to_c_generated.txt (clave pública en formato C), donde se podrán ver los valores de modulo y exponente en formato hex, hay que reemplazar estos por los que están por defecto en la ruta de instalación de las claves..

(14) La clave pública se almacena en el dispositivo y la clave privada está protegida por el desarrollador. La clave pública debe ser asegurada de una de dos maneras: Un método para validar la fuente de la clave. Esto se puede lograr con algún tipo de comunicación con una fuente o servidor conocido. Esto no es práctico para dispositivos que no pueden comunicarse fácilmente con un servidor conocido cuando es necesario. La otra opción más probable para un sistema integrado es que los datos clave se validen mediante el uso de una clave almacenada en la memoria que no se pueda modificar. 5.3 Código Fuente Lo primero es el cálculo del resumen del mensaje con SHA-256 que se explicó anteriormente (Figura 3). Generación de firma digital Lo segundo es firmar el resumen del mensaje haciendo uso de la llave privada. Actualmente, el controlador criptográfico proporciona soporte solo para el cifrado o la verificación de firma utilizando los métodos de multiplicación de Montgomery, exponenciación de Montgomery y reducción de Barrett, y esto se hace utilizando solo la clave pública. Por lo tanto, la firma se generará desde OpenSSL usando la función hash anteriormente calculada y posteriormente será operada en PSoC (Figura 14).. .. Figura 14. Comando firma digital Openssl. Fuente propia. La firma digital en Openssl es generada como un archivo binario, por lo que deberá convertirse a formato base 64 (Figura 15), para poder convertirse posteriormente a formato hex, que es el formato en que se operan las firmas en PSoC..

(15) Figura 15. Firma digital openssl en base 64. Fuente: propia. Cuando la firma se coloca en formato Big-endian [15], que es el formato en que openssl genera las firmas, hay que hacer uso de la función Cy_Crypto_Rsa_InvertEndianness (), la cual se encargara de invertir el orden de bytes de la salida. El siguiente paso es descifrar la firma usando la función Cy_Crypto_Rsa_Proc (),en este caso se pasa texto con formato y una clave pública para descifrar el resumen del mensaje (Figura 16).. Figura 16. Descifrado del resumen. Fuente: propia. RsaOutput es el buffer de salida donde queda almacenada la firma descifrada y rsaEncrypted sign donde se almacena la firma digital.. Validación de firma digital El último paso es la verificación de la firma usando la función Cy_Crypto_Rsa_Verify (), la cual comparara el resumen del mensaje descifrado con el resumen guardado en RsaOutput (Figura 17)..

(16) Figura 17. Código verificación de firma. Fuente: propia 7.Resultados. Figura 18. Simulación SHA-256 en Tera Term. Fuente: Propia. Se generó un valor de hash de 256 bits para el mensaje de entrada de usuario, cada mensaje tiene un valor de hash único, por lo que cualquier modificación cambia su valor (Figura 18).. Figura 19. Firma digital. Fuente: Propia..

(17) Se generó la firma digital haciendo uso de la llave privada.. Figura 20. Verificación de firma. Fuente: propia. En la figura 20 se muestra la firma descifrada, la cual no será mostrada si hubo alguna modificación en el resumen del mensaje. La simulación se realizó haciendo uso de dos PSoC 6 , donde una genera la firma digital llamando a OpenSSL ,enviando está a la otra PSoC para que pudiera ser verificada. Una vez pudiera ser autenticada la firma, para mostrar el mensaje se descifro el hash, haciendo uso de la misma función que se usó para generar este. La idea de este proyecto es que las firmas se puedan usar en cualquier tipo de red (abierta, pública, privada, etc.), garantizar la autenticidad, confidencialidad e integridad de los datos, que el receptor de un mensaje pueda detectar cualquier falsificación o manipulación de estos..

(18) 6.analisis de algunas métricas de interés. Memoria flash. 6.43Kb/1MB. Memoria SRAM. 0.55 Kb/288Kb. Frecuencia de operación del reloj. 25 MHz. Tiempos de respuesta de aplicación. 8890 microsegundos. Tabla 2. Análisis de métricas. Fuente: Propia. Los parámetros de memoria fueron medidos mediante el compilador La memoria flash se divide en tres partes: 1.Flash (arranque): es parte del sistema de arranque y realiza 2 tareas básicas 1.1 Configurar el puerto de depuración. 1.2 Validar la aplicación de usuario antes de ejecutarla. 2. Flash (Usuario): esta es la memoria flash que se utiliza para almacenar el código de la aplicación. 3. SFlash: esta partición de la memoria flash, se encarga de ejecutar el codigo de arranque flash y del almacenamiento de la clave pública. 4.Reloj: El reloj viene configurado por defecto a esta frecuencia y permanecerá en esta configuración después de la ejecución de arranque flash. 5.Memoria SRAM: El mayor consumo de la memoria se debe a la cantidad de rondas que realiza SHA-256, aun así, sigue teniendo mayor ventaja que la memoria flash..

(19) Tiempos de respuesta Para realizar la medición del tiempo se usó un contador interno, el cual puede medir el tiempo de cada función implementada en la estructura del código. Gracias a esto se pudo calcular los tiempos de cada bloque funcional. Conclusiones Se realizó la implementación de un esquema de firma digital cumpliendo con el estándar PKCS #1 v2.2, el cual es aplicable a un sin número de aplicaciones que requieran el uso de una plataforma embebida hardware de 32 bits, el cual, es por definición un sistema stand-alone que no requiere de ningún tipo de hardware adicional. Se utilizaron las funciones que controlan los bloques hardware internos del dispositivo para realizar las funciones Hash y el algoritmo de cifrado asimétrico RSA, usando funciones atómicas en lenguaje C++ propias de la suite y la plataforma embebida software usado. Al realizar una implementación real en un dispositivo de bajo consumo, se pueden realizar mediciones de uso de memoria volátil y estática, junto con mediciones de tiempos de funcionamiento del algoritmo y de esa manera verificar cada una de las instancias del algoritmo, realizando mediciones exhaustivas de dichas métricas. Se implementó la función SHA-256 que compensa la lentitud de la criptografía de clave pública y cuyo principal objetivo fue la creación de un resumen de mensaje de 256 bits de un bloque de datos arbitrarios, de tamaño fijo e independiente al tamaño original, con un tiempo de respuesta de 3215 microsegundos y usando tan solo el 0.61 % de memoria flash y el 0.11 % de memoria RAM, lo cual permite realizar infinidad de soluciones al quedar la mayoría de recursos disponibles para otro tipo de procesamiento..

(20) Hoy en día la factorización de números primos muy grandes sigue siendo un gran problema, lo que hace al algoritmo RSA un sistema criptográfico muy seguro, el tamaño de claves de 2048 bits son prácticamente imposibles de romper y/o violentar, pero al ser un algoritmo de tanta complejidad requiere un tiempo de procesamiento de 5945 microsegundos, lo cual lo hace la parte que más demanda tiempo dentro de la aplicación realizada. Gracias a esto se pudo realizar un esquema de firma digital y verificar la integridad de los datos, comprobando la autenticidad de los mismos. Para trabajo futuro se pretende hacer estudios de más plataformas embebidas de 32 bits, investigar otros estándares de firmas digitales, hacer comparaciones de su rendimiento al implementar algoritmos criptográficos. Referencias: [1]. “PSoC® 6 BLE Pioneer Kit (CY8CKIT-062-BLE).” [Online]. Available: https://www.cypress.com/documentation/development-kitsboards/psoc-6-blepioneer-kit-cy8ckit-062-ble. [Accessed: 19-Jul-2019].. [2]. M. Kidon and R. Dobai, “Evolutionary design of hash functions for IP address hashing using genetic programming,” in 2017 IEEE Congress on Evolutionary Computation (CEC), 2017, pp. 1720–1727.. [3]. A. Karakra and A. Alsadeh, “A-RSA: Augmented RSA,” in 2016 SAI Computing Conference (SAI), 2016, pp. 1016–1023.. [4]. X. Zhang, R. WU, M. Wang, and L. Wang, “A High-Performance Parallel Computation Hardware Architecture in ASIC of SHA-256 Hash,” in 2019 21st International Conference on Advanced Communication Technology (ICACT), 2019, pp. 52–55..

(21) [5]. “Descriptions of SHA-256, SHA-384, and SHA-512.”. [6]. “Peripheral. Driver. Library. (PDL).”. [Online].. Available:. https://www.cypress.com/documentation/software-and-drivers/peripheraldriver-library-pdl. [Accessed: 18-Jul-2019]. [7]. “PKCS #1 v2.2: RSA Cryptography Standard,” 2012.. [8]. Y. Wu and X. Wu, “Implementation of efficient method of RSA key-pair generation algorithm,” in 2017 IEEE International Symposium on Consumer Electronics (ISCE), 2017, pp. 72–73.. [9]. “IEEE. 1363-2000. -. IEEE. Standard. Specifications. for. Public-Key. Cryptography.” [Online]. Available: https://standards.ieee.org/standard/13632000.html. [Accessed: 21-Jul-2019]. [10] D. Phiamphu and P. Saha, “Redesigned the Architecture of ExtendedEuclidean Algorithm for Modular Multiplicative Inverse and Jacobi Symbol,” in 2018 2nd International Conference on Trends in Electronics and Informatics (ICOEI), 2018, pp. 1345–1349. [11] Jorge, “Píldora no 25: ¿Cómo calculamos inversos con el algoritmo extendido de Euclides? Escena 1: Intentando minimizar el trabajo de encontrar el inverso.” [12] S. Carre, M. Desjardins, A. Facon, and S. Guilley, “OpenSSL Bellcore’s Protection Helps Fault Attack,” in 2018 21st Euromicro Conference on Digital System Design (DSD), 2018, pp. 500–507. [13] B. A. Malloy and J. F. Power, “Quantifying the Transition from Python 2 to 3: An Empirical Study of Python Applications,” in 2017 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM),.

(22) 2017, pp. 314–323. [14] “PSoC 6 MCU: Creating a Secure System Author: Mark Hastings Associated Part Family: PSoC ® 6 MCU.” [15] “Fomato &quot;Big Endian&quot; y &quot;Little Endian &quot;”.

(23)

Figure

Figura 1. Función de comprensión SHA-256. Fuente: [4].
Figura 2.PSoC 6 BlE Pionner kit [1].
Figura 3.Diagrama SHA-256 en PSoC 6. Fuente: propia.
Figura 4.Librería Crypto. Fuente : propia.
+7

Referencias

Documento similar

Proporcione esta nota de seguridad y las copias de la versión para pacientes junto con el documento Preguntas frecuentes sobre contraindicaciones y

[r]

Y tendiendo ellos la vista vieron cuanto en el mundo había y dieron las gracias al Criador diciendo: Repetidas gracias os damos porque nos habéis criado hombres, nos

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

E Clamades andaua sienpre sobre el caua- 11o de madera, y en poco tienpo fue tan lexos, que el no sabia en donde estaña; pero el tomo muy gran esfuergo en si, y pensó yendo assi

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

d) que haya «identidad de órgano» (con identidad de Sala y Sección); e) que haya alteridad, es decir, que las sentencias aportadas sean de persona distinta a la recurrente, e) que

Las manifestaciones musicales y su organización institucional a lo largo de los siglos XVI al XVIII son aspectos poco conocidos de la cultura alicantina. Analizar el alcance y