之前和AVRCrypto的作者聊過,在AVR/ARM7的基礎(chǔ)上,他認(rèn)為RSA512以上計(jì)算時(shí)間就已經(jīng)非常長了。所以我腦子里總是得到了MCU無法支持TLS的結(jié)論。ARM mbed收購PolarTLS之后,將其開源并更名為mbed TLS,成為mbed OS的一部分。我曾經(jīng)嘗試在最標(biāo)準(zhǔn)的STM32F103RB上實(shí)現(xiàn),但是無法運(yùn)行。
今天我利用ARM mbed online compiler和NUCLEO-F401RE重新做了一次快速測試。記過讓人驚喜:F401RE居然可以在2秒鐘內(nèi)完成RSA2048位的計(jì)算,這已經(jīng)符合主流的TLS證書要求。也可以用于Android USB設(shè)備認(rèn)證,雖然現(xiàn)在AOA設(shè)備早就被人所遺忘。

圖1:Tera-Term中F401RE所打印的各種密碼算法性能對(duì)比
可以看到RSA-2048所需時(shí)間為52ms/1968ms,比我預(yù)算的幾分鐘要快許多,處于可接受的范圍。如果使用ECC的ECDSA,最短也只需要403ms。非常實(shí)用。
但是有兩點(diǎn):
- 為何STM32F103RB無法運(yùn)行基礎(chǔ)的SHA-256算法而直接崩潰?
- F401RE運(yùn)行后為何會(huì)拋出一個(gè)Stack underflow的錯(cuò)誤?
F103RB基于M3內(nèi)核,最高主頻72MHz,F(xiàn)401RE基于M4內(nèi)核,支持DSP/FPU,最高主頻84MHz。如果mbed-TLS沒有利用DSP和FPU,僅這些主頻差別意味著F103RB其實(shí)也是可以支持TLS/RSA2048的認(rèn)證的。
再次編譯F103RB,系統(tǒng)終端提示RSA2048 malloc出錯(cuò),意味著20KB RAM是主要的瓶頸,而且即使關(guān)閉RSA項(xiàng)目,ECDSA同樣也沒有任何輸出。而對(duì)比F103RB/F401RE兩者性能,大約是1:1.67左右,且與算法有關(guān)聯(lián)。所以下次需要在STM32F103RE(64KB RAM)上測試一下。