2017-03-12 99 views
0

据我所知,在Linux内核基本上有2种加密选项:加密在Linux中

  1. cryptodev(的/ dev /加密)

  2. AF_ALG

但在文档中,两种方法都被称为硬件加密,即需要硬件支持的方法。因此,如果我需要Linux中的加密支持,并且没有hw支持,那么用户空间API(对于AF_ALG和cryptodev)仍然可以工作吗?

如果是 - 是否意味着它们在内核中使用软件算法?

我使用的是基于ARM的Arria V,但是在文档中没有提到加密,所以我不确定它是否支持硬件。

+0

芯片和手臂核心的确切名称是什么? Linux内核版本? – osgx

+0

这是Arria V(altera/intel),内核4.1.x – ransh

+0

Arria V哪一个(表中的哪一列https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature /pt/arria-v-product-table.pdf或者只是确切的电路板名称或准确的芯片名称5A ?????)?什么是ARM内核('cat/proc/cpuinfo')?你从哪里得到你的linux内核,你可以发布内核的'config'文件(有时它可以用'/ proc/config.gz'或/ boot分区)。芯片/ CPU的确切名称是需要在硬件中搜索加密加速器的,并且内核配置 - 要检查是否启用加密API。 – osgx

回答

3

概述的两种方法:AF_ALG和cryptodev(/dev/cryptohttps://events.linuxfoundation.org/sites/events/files/slides/lcj-2014-crypto-user.pdf#page=8 “使用加密加速器 - 马雷克·瓦苏特 - 5月18日2014”

据我了解,AF_ALG只是使用generic kernel crypto API可以使用硬件加密加速器,但总是可以使用内核中启用的软件加密。 AF_ALG可以在4.1内核by CONFIG_CRYPTO_USER_API option内核配置中设置为'y'或'm'时启用(检查内核的配置文件,有时可用/proc/config.gz或在/ boot分区中)。而使用一些算法(散列,对称密码,随机生成),对应CONFIG_CRYPTO_USER_API子选项也应该被启用:

http://lxr.free-electrons.com/source/crypto/Kconfig?v=4.1#L1485

1485 config CRYPTO_USER_API 
1486   tristate 
1487 
1488 config CRYPTO_USER_API_HASH 
1489   tristate "User-space interface for hash algorithms" 
1490   depends on NET 
1491   select CRYPTO_HASH 
1492   select CRYPTO_USER_API 
1493   help 
1494   This option enables the user-spaces interface for hash 
1495   algorithms. 
1496 
1497 config CRYPTO_USER_API_SKCIPHER 
1498   tristate "User-space interface for symmetric key cipher algorithms" 
1499   depends on NET 
1500   select CRYPTO_BLKCIPHER 
1501   select CRYPTO_USER_API 
1502   help 
1503   This option enables the user-spaces interface for symmetric 
1504   key cipher algorithms. 
1505 
1506 config CRYPTO_USER_API_RNG 
1507   tristate "User-space interface for random number generator algorithms" 
1508   depends on NET 
1509   select CRYPTO_RNG 
1510   select CRYPTO_USER_API 
1511   help 
1512   This option enables the user-spaces interface for random 
1513   number generator algorithms. 

Cryptodev(http://cryptodev-linux.org/index.html)看起来有点像乱树司机,不包含在标准内核中(空搜索http://lxr.free-electrons.com/ident?i=crypto_runhttp://lxr.free-electrons.com/ident?i=cryptodev)。它应该由用户下载,构建和安装(幻灯片10的https://events.linuxfoundation.org/sites/events/files/slides/lcj-2014-crypto-user.pdf#page=10超出内核树代码(多年)”)。他们还在他们的网站上声称“支持所有主要的密码和哈希算法”,所以它可能会使用硬件加密加速器,但将适用于任何支持的算法与软件实现时,没有硬件(总是有一些加密没有被任何硬件实现)。因此,如果我需要Linux中的加密支持,并且没有hw支持,那么用户空间API(对于AF_ALG和cryptodev)仍然可以工作吗? 如果是 - 是否意味着他们在内核中使用软件算法?是的,这两种方法都可以在没有任何硬件加密的情况下工作,并将使用内核中可用的所有软件实现(在内核构建时启用)。

+0

感谢您的详细解答。根据我的理解,完成处理硬件实现时,假设有些供应商选择在AF_ALG中实现驱动程序,而其他实现在cryptodev中实现它,是否正确? – ransh

+0

ransh,不正确。 AF_ALG和cryptodev就像通用Linux内核Crypto API的代理(检查http://lxr.free-electrons.com/source/crypto/Kconfig?v=4.1),并且在Linux内核Crypto API中实现了硬件支持。其他crypto hw只是Intel/AMD x86/amd64或VIA中的AES和SHA等CPU指令,可用于用户空间程序(https://lauri.xn--vsandi-pxa.com/2014/07/cryptodev.html“请注意,作为VIA Padlock [4]和Intel AES-NI [5]等指令实现的加密硬件不需要用户空间使用任何特殊机制。“) – osgx

+0

Linux内核中的HW加密在”devices/crypto“目录,而不是通用软件”/ crypto“,并且有支持hw的列表,如http://lxr.free-electrons.com/source/drivers/crypto/Kconfig?v=4.1 4.1或更大的列表最近的内核http://lxr.free-electrons.com/source/drivers/crypto/Kconfig – osgx