2017-03-12 166 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