Skip to content
Permalink
main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
# SFN
En este repositorio se encuentra una implementación en verilog de https://doi.org/10.1016/j.micpro.2018.04.009. SFN es un cifrado de bloques ligero en el que se usa una red de Substituciones-Permutaciones y/o una red Feistel.
### Desarrollado con
* [![Verilog Logo](https://img.shields.io/badge/verilog-IEEE%201364.1-9cf)](https://www.verilog.com/)
* [![Python Logo](https://img.shields.io/badge/python-3.11-blue)](https://www.python.org/)
### Tabla de contenidos
- [SFN](#sfn)
- [Desarrollado con](#desarrollado-con)
- [Tabla de contenidos](#tabla-de-contenidos)
- [Herramientas](#herramientas)
- [Icarus Verilog](#icarus-verilog)
- [GTKWave](#gtkwave)
- [OpenROAD](#openroad)
- [Módulos](#módulos)
- [AddConstants](#addconstants)
- [MixColumns](#mixcolumns)
- [GFmul](#gfmul)
- [MixRows](#mixrows)
- [MixXors](#mixxors)
- [Permutation](#permutation)
- [S-Boxes](#s-boxes)
- [S1-Box](#s1-box)
- [S2-Box](#s2-box)
- [Utils](#utils)
- [Cont_5bit](#cont_5bit)
- [Demux_1to2](#demux_1to2)
- [Join_64bit](#join_64bit)
- [Mux_2to1](#mux_2to1)
- [Swap_64bit](#swap_64bit)
- [Xor_32bit](#xor_32bit)
- [Xor_64bit](#xor_64bit)
- [Contacto](#contacto)
# Herramientas
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## Icarus Verilog
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## GTKWave
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## OpenROAD
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
# Módulos
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Si nos fijamos en la Figura 9, que corresponde con el datapath,
nos encontramos con varios componentes bien diferenciados
que son los implementados a continuación.
## AddConstants
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## MixColumns
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
### GFmul
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## MixRows
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## MixXors
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
## Permutation
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Una P-Box es una capa que se utiliza en algoritmos de cifrado
para mezclar o reorganizar los bits en un patrón específicos.
Como hemos visto en teoría una manera de obtener confusión es
a través de permutaciones.
## S-Boxes
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Una S-Box es un componente crucial en muchos algoritmos de cifrado,
especialmente en cifrados de bloques. La abreviatura "S" se refiere
a "Sustitución", debido a que realizan una operación de sustitución
no lineal en los datos de entrada. Como hemos visto en teoría
una manera de obtener confusión es a través de sustituciones.
### S1-Box
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
El contenido de la S1-Box viene especificado en la Tabla 1.
Resaltar que corresponde con la S-Box de Midori64.
### S2-Box
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
El contenido de la S2-Box viene especificado en la Tabla 3.
Comentar que esta caja es la S-Box de PRINCE.
## Utils
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
En este apartado incluimos el resto de componentes que
necesitamos para la implementación del datapath de la
Figura 9, los cuáles corresponden con componentes más
generales que podemos encontrar en multitud de circuitos
de diferente índole.
### Cont_5bit
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Este módulo implementa un contador de 5 bits, con el que
controlaremos en que iteración nos encontramos.
### Demux_1to2
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
En este componente se implementa un demultiplexor 1 a 2.
### Join_64bit
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Si nos fijamos en el datapath encontramos que en ocasiones
tenemos que concatenar en un solo bus de 64 bits, 2 buses de
32 bits, este modulo es el que se encargar de ello.
### Mux_2to1
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Aquí implementamos un multiplexor 2 a 1.
### Swap_64bit
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
En este modulo intercambiamos una entrada de 64 bits
donde los 32 bits LSB pasan a ser los 32 bits MSB y
viceversa.
### Xor_32bit
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Esta capa realiza la operación XOR entre 2 operandos de
32 bits cada uno.
### Xor_64bit
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
Esta capa realiza la operación XOR entre 2 operandos de
64 bits cada uno.
# Contacto
<sup>[(volver al principio)](#tabla-de-contenidos)</sup>
| Nombre | Correo |
|-------------------------------|--------------------------|
| Pablo Cano Navajas | pabcannav@alum.us.es |
| Juan Diego Galisteo Gómez | juagalgom1@alum.us.es |
| Juan Pedro Gallardo Peral | juagalper2@alum.us.es |
| Álvaro Núñez Marín | alvnunmar@alum.us.es |
| José María Sigüenza Izquierdo | jossigizq@alum.us.es |