iOS 端RSA解密結(jié)果變短問(wèn)題的定位

本周三給部門里全球的同事做了個(gè) 設(shè)計(jì)安全原則 的講座,昨天有個(gè)做iOS的同事找到我,說(shuō)遇到RSA解密跟后端和Android端不一致的問(wèn)題。誒?!說(shuō)明這個(gè)講座還是有人聽(tīng)進(jìn)去了,而且枯燥的主題下(講“原則”)的全英文session,他還能聽(tīng)出來(lái)我在安全實(shí)戰(zhàn)方面的經(jīng)驗(yàn)豐富,老夫不禁感到老懷大慰!

這個(gè)問(wèn)題定位的過(guò)程還是很有意思的,值得一記!先總結(jié)一下結(jié)果,我們?cè)賮?lái)看一則對(duì)話。

總結(jié)

  • 程序員問(wèn)問(wèn)題會(huì)比較天馬行空,想到啥就問(wèn)啥。他/她們往往設(shè)想某個(gè)地方?jīng)]問(wèn)題,然后問(wèn)的時(shí)候,把你往一些他關(guān)注的地方帶。作為大佬,一定要了解全局,從最基礎(chǔ)的地方了解起,不要放過(guò)任何一個(gè)細(xì)節(jié)。有時(shí)候他們會(huì)很生氣,覺(jué)得你不信任他們,問(wèn)那么愚蠢的問(wèn)題。這時(shí)候一定要堅(jiān)持做沒(méi)情感的糾錯(cuò)機(jī)器人,要懷疑一切,不能相信他們,如果他們的假設(shè)是成立的,那又怎么會(huì)找不到問(wèn)題呢?對(duì)吧?!
  • iOS 的基礎(chǔ)庫(kù)良莠不齊,有些地方用c做字符串,這會(huì)造成截?cái)喱F(xiàn)象!

對(duì)話...

問(wèn)者
Hi 山哥
想咨詢下關(guān)于RSA加解密的問(wèn)題 最近項(xiàng)目遇到偶發(fā)的解密出來(lái)的明文數(shù)據(jù) 長(zhǎng)度異常 比預(yù)期要短 偶現(xiàn)的問(wèn)題 是在iOS端
把iOS生成和publicKey跟 privateKey給API那邊 他們用publicKey來(lái)加密privateKey 解密 數(shù)據(jù)是正常的
關(guān)于這個(gè)有沒(méi)有什么解決思路 期待你的回復(fù) 謝謝

山哥:?jiǎn)栴}是 解密出來(lái)的結(jié)果不正確?

問(wèn)者:對(duì) 長(zhǎng)度不對(duì)
能解出來(lái) 但是長(zhǎng)度明顯比較短

山哥:我想了解一下整個(gè)流程。是不是:
iOS 加密,api 解密,偶發(fā)現(xiàn)象是“出來(lái)的結(jié)果不對(duì)”?還是說(shuō)加密解密都是iOS做的,然后偶發(fā)出錯(cuò)現(xiàn)象?

問(wèn)者:API加密 iOS解密
(編者按:... 附上一堆長(zhǎng)長(zhǎng)的 keys in hex,可以看到hexPublicKey, hexPrivateKey, encrypted3DESKey)這些字樣)
decrypted3DESkey=17F6 這個(gè)長(zhǎng)度預(yù)期是60位
但是實(shí)際解出來(lái)只有4位
偶發(fā)的bug

山哥:所以你加密的對(duì)象是3DES的key?
(思路:看起來(lái)像是HTTPS的原理,先用 非對(duì)稱密鑰 來(lái)生成一個(gè)臨時(shí)的 對(duì)稱密鑰,再用來(lái)加解密通訊...)

問(wèn)者:ios生成RSA的keyPair把publicKey給API, API加密3DESKey 然后iOS再解密3DESKey
api加密ios解密

山哥:拿到這個(gè)3DESKey之后,如果key size感覺(jué),是不是就出現(xiàn)雙方無(wú)法通訊的問(wèn)題?這個(gè)key是用來(lái)雙方通訊的吧

問(wèn)者:對(duì)的
就是解出來(lái) 發(fā)現(xiàn)keySize異常 后續(xù)通訊失敗

山哥:初步懷疑是有時(shí)候后端生成的key有特殊字符,比如'\0', 在iOS被截?cái)嗔?。是不是Android沒(méi)有這樣的問(wèn)題?
(思路:大膽假設(shè),小心求證!iOS底層是oc, c 的字符串是用'\0' 來(lái)標(biāo)記結(jié)束的。雖然不知道解密為什么會(huì)用到字符串,但這種失敗也很少見(jiàn)?。?/code>)

問(wèn)者:AOS沒(méi)有這個(gè)問(wèn)題

山哥:你先把這個(gè)key, 用Java解密之后,打印個(gè)byte[]的 int 數(shù)值出來(lái),看看有沒(méi)有 0。先確認(rèn)問(wèn)題,再想辦法解決。

問(wèn)者:好

問(wèn)者:48 28 4 ... -42 0 23 -10
里面是有個(gè)0, 截?cái)嗟墓痪褪? 后面的沒(méi)有了

...
實(shí)錘了!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容