看到了一篇科普文章,就很奇怪為什麼一定要用質數?

為什麼文中說,要求pqr必須是質數?是質數的話,就算很大,但理論上就算不知道質數是多少,也一定有唯一的冪。而如果大家商量好找三個合數的話(只要這三個合數不是彼此的幾次方的話,比如4 16 64這樣的),那豈不是隻要不知道這三個合數是多少,就永遠也不可能破解開了,同時也能保證知道這3個合數的情況下冪是唯一的?


我猜我這個問題對於數學大神,甚至一般的數學學者來說肯定特別白癡……但是還是求解答呀……


嗚…

說一點個人的理解吧…

首先這個例子很明顯是不恰當的。看起來像是在拙劣地模仿RSA而失敗了(關於為什麼不恰當,一會會有說明)

那麼進入正題。

首先,關於為什麼不用合數。

在這個例子裏,合數當然是沒有問題的。

我們把這n個數(題中為三個)的全部m個素因子提取出來,並定義aij為第i個數中第j個因子的次數。

那麼只要這個矩陣A的秩是n,問題就是理論上可解的。

那麼基於此,我們就能構造出一個反例

6,12,24

那麼解密一方是無法確認144=6×24=12×12的原始信息的。

在RSA演算法中也是類似——如果使用合數,並不是「安全性下降」這種問題,而是「加密-解密」的逆運算就不成立。

然後我們來說,文中的例子為什麼是糟糕的。

我們要明確的一個前提是,在我們的討論中,密鑰應當被多次使用——不然如果是一次性密碼本(密鑰長度=密文長度)的話,簡單的xor就能夠構成即使在數學上也是不可破譯的密碼了。

那麼,在這個問題裏。如果Eve收到了幾段不同的信息——那麼不去取一下最大公約數的話豈不是屑。

畢竟取最大公約數又沒有什麼太高的複雜度(攤手)

只要多做幾個來回,很輕易地,竊聽者Eve就可以還原出這幾個素數。然後的事情就……


如果大家商量好找三個合數的話(只要這三個合數不是彼此的幾次方的話,比如4 16 64這樣的),那豈不是隻要不知道這三個合數是多少,就永遠也不可能破解開了

就事論事吧,不說RSA了。

你的論點不成立

首先,你應當注意到,我們在這裡的約定是「一次性」的,我們不會在每次傳遞信息之後重新約定pqr——但與此同時,傳遞信息可能會有多次。

某些時候,傳遞的信息可能會有一定的規律,比如如果你傳遞ASCII碼英文字母的話,傳遞的信息的大小是受到限制的——同時你應當注意,如果你傳遞的字母需要組成單詞(而不是傳遞一串亂碼),那麼,我們可以很方便地判定某個解是否是密碼

注意到這一點,破譯合數密碼會簡單很多:

比如,合數可以繼續分解成更小的質數:

破譯者沒必要知道合數的任何信息,破譯者只需要看合數的幾個素因子就好。

把質數改成合數,對破譯者來說,只是小麻煩而非大麻煩。

——然而,如果改成合數,很可能破壞分解難度/增加需要傳遞的信息的長度

得不償失


關鍵是:你需要對因式分解的難度有一定的認知:

一年有多少秒:3.15e+07。太湖之光超級計算機每秒浮點數運算次數:125.436PFlops(Peta,e+15),即1.25e+17。那麼,使用太湖之光超級計算機對200位素數窮舉法因數分解需要2.52e+191年,地球的年齡約4.5e+10年,宇宙的年齡約1.4e+11年。大家可以想像一下這個時間尺度。

關於素數可以看這篇文章

離散數學極簡教程(三)——素數的故事?

mp.weixin.qq.com圖標


用不用質數取決於加密的方式。

你的例子單從傳遞信息角度可以用合數,只要pqr互質就行。(不互質的話,加密沒問題,解密可能出現多解)

從分解角度,你的pqr如果是合數,那麼結果含有更多較小的素因子,如果對方從小因子開始試除,那麼分解會更快。

當然,因子分解目前沒有特別好的方法,有的方法對小因子多的快,有的對幾個因子差不多大的快,具體快慢要看對方用哪種方法,而你應該從最壞的情況考慮。

也就是說,你很可能降低了破解難度。


謝邀,做過一點密碼學的研究,學過一點RSA密鑰公里體系,也有圖像加密的研究,但是仍然不是很瞭解,但我想用質數的原因是因為他足夠特殊,如果說整個自然數是一座大廈,素數毫無疑問是組成這座大廈的基石,因為任給一個自然數除0和1,都可以在變換次序的意義下進行唯一的素數的分解,而中國剩餘定理(對就那個韓信點兵問題)其實就算是RSA加密的理論,也是隻針對素數展開的(點兵問題是3,5,7吧,不記得很清,但是肯定是素數)這個跟解法有關,至於有沒有基於非素數的加密方法呢,我不清楚可能是有的,對比較特殊的合數,開個腦洞,比如說平方數,費馬數或者菲比拉契數,但是我真不瞭解不胡說。密碼理論是一個非常高深的學科,數論,羣論等很多理論都需要用到。但是為什麼密碼一定要用質數呢,我只能說夠簡單夠經典,如果用其他的比如費馬數,菲比拉契數,那麼加密耗費內存就很大,相比這兩者而言,用孿生素數可能還代價小點,當然素數是最理想最簡單的了。


RSA不是拿素數這麼玩的。這只是個簡單例子,用來展現「質因數分解是困難的」這個事情。


因為合數能拆分成更小的質數 你等於降低了破解難度 用更大的數傳遞了更少的信息 比如同樣是210你用14和15做因子只能傳遞1 1這個信息 我用 2 3 5 7能傳遞1 1 1 1這個信息 兩條信息的破解難度相同 而用11和 13作為因子傳遞 1 1這個信息他需要的數143更小 反而比210更難破解


數論密碼已經有人說了。我補充下吧,很多密碼都用有限域為基礎。而有限域的元素個數是必定是 q^n for some positive prime number q and some natural number n. 為什麼用有限域,因為很多問題放到有限域上會變得很難,比如MQ problem, 在有限域上解多變數二次多項式組,因為沒有度量空間,就沒有辦法逼近用numerical 辦法。


推薦閱讀:
相關文章