一種序列號防盜版的方法

2021-06-02 09:46:50 字數 2438 閱讀 3126

問題提出:

軟體的防盜版,最常見的手段是使用「序列號」。

但是,很多盜版軟體,隨附「序列」號。

在相當多的情況下,是無法防止盜版軟體安裝使用的——除非在使用中,軟體「開後門」進行遠端「傳話」來確認「當時執行軟體」的乙個例項,是否為「合法」使用者。

而這在實際操作中,也會涉及一些不確定性和法律定位問題。

問題的乙個解決思路:

說明:該方法,是「可實時取消所有以往授權」的,隨時需要「最新授權」的方式。

方法的核心是:採用規則驗證,而非簡單的字串驗證,在遠端使用者資料資料庫驗證(遠端使用者資料資料庫驗證,是很多軟體現在採用的方法)

方法:分以下幾個步驟或角度來解決。

一、驗證方法:規則驗證

如,規定第三位數字,為第一位數字加第二位數字減5;第5位數字為第4位數字加第一位數字;等等,需要一定的位數。

如此一來,授權檢驗**,是一樣的,而可以檢查的物件,是可以「自動生成」和「標準化檢驗」的。

二、驗證方法的「複雜化」

上面的方法,稍有數學經驗的人,憑肉眼,經過幾個「合法序碼」的人工觀察,就可以發現其中的規律。

那麼,通過另一組授權數字來做「控制」,就可以,很有效地增加破密難度。

比如,下面一組數字,1352467的含義是:為後面七個字母,按這七位數的順序「重取排序」,才是「初始密文」。如1352467abcdefg,真實的「原始密文」為a(原第1位)c(原第3位)e(原第5位,後以此類推)bdfg,即acebdfg。

如果,數字與字母,再改進為「交叉配置」,將使破密變得更難。

還有更複雜的方法:如規定乙個數字,是找到這個數字後,再以此為「起點」,迴圈式,找到「後續數字」,做為「位置控制串」,再以一定規則規定「字母取點的起始點」,然後,以迴圈方式,取出後續字母,將使獲得「初始密文」,變得更複雜。

還可以,使這個方法,為得再複雜一點。

三、這個方法的本質

這個方法,是一種改良的德國「恩尼格」加密法。

這種方法,是可以通過海量密文,通過方程式計算,經過大量計算,可以直接得出「加密輪表」的。

當年這套密碼被破譯的核心有兩條:

(一)就是德國發報員偷懶,沒有按規定,每發乙份電報,就要改變金鑰輪的初始位置。這就使盟軍破譯人員,大大簡化工作量。

(二)每回發報,首先是明文傳送金鑰輪的基本資訊,這也為破譯人員,分類簡化勞動,提供了極大的方便。

四、這個方法的可靠性分析

二戰中,戰場中有大量電文,所以,「破譯」密碼的乙個基本要件——「海量報文」,供破譯演算的「原材料」,足夠多。

但用在序列碼上,上述方法,如果經過「更精細」的規劃設計,並設計「幾組無關運算」,同時,加進一點「組間有損驗算碼」(有損就是避免精確數學計算的「直接解算」),就為得可靠了。

原因如下:

(一)做為乙個產品,有二十位序列碼,是常見的。雖然短,但,由於產品售出數,並不是「海量」。相對於「20位字母數字」所能產生的組合,就顯得「非常少」了。換句話說,如果有人想破譯,做「序碼生成機」,可供其「猜測」的「樣本量」太少,不足以推算以破密。

(二)如果「經過二次加密」的一些控制資訊,也是「受控可換」的,將使破密變得更複雜。

這時,就可以利用網路了。

比如,在網路上,乙個固定url上,提供一組數字,這組數字,是經常變化的。

只要一換「控制資訊」,原先所有序列號,全部失效。

尤其是,這組「控制資訊」與序碼本身無關時。

舉例:url上發布的「控制資訊」含義如下:x(第1組的運算代號,1加2減3乘4除)x(第2組的運算代號,1乘2加3除4加)x(每組運算結果加偏值)x(換位取數起點)x(供取字母起點)x(取數迴圈跨越數(應為質數,最低要數為奇數))x(取字母迴圈跨越數(應為質數,最低要數為奇數))。

如此一來,只要不定期更換控制碼,同樣的規則,就可以驗證「幾乎無窮多」的變化,同時,可以隨時廢止原來有效的所有序列碼。

如果,再加強,採用二重,或三重加密,還可以增加複雜性。

但是,在「密文長度有限」(如20位)時,加密層數增加時,並不能「迅速增加破密難度」,因為在數學上,這表現為金鑰鏈的長度簡單增加而已。如果有「設計良好」的「數學方法」,加密重數的增加,就不能增加「破密難度」了。

(三)做任何事,都要有「一定的功利性」

在戰爭時期,破密有價值,極大。並且,在戰時,多大腕的「科學家」,也不會「高薪」到什麼程度,甚至,只是管飯,不用上前線,就可以了——所以,就等效於,「成本」相對較低。

而在時下和平時期,破乙個「新的」只是「工作量」的事,而方法上,都是數學可以解決的「破密問題」,就有「值不值」的問題了。花上一萬塊成本,去破譯,最多隻賣幾百塊的產品的金鑰系統,是不值的。

所以從「功利性」上來說,做「破密」,也是「不值的」——也就是說,沒人願幹這事——也幹不起,也不值得幹。

五、更進一步的說法

只要「只要合理構架」具有「基本複雜度」的「驗算組規則」,再配合上「網路動態提供」「控制碼」,做乙個通用的序碼驗證方法,實現「一套**」的「海量可靠序列碼」,並可隨時廢止原序列碼,所有合法序碼均需「有時效性」的申請使用,是可以「極低成本」防止盜版軟體的「安裝可行性」的。

一種基於有序序列mapjoin的方法

在解決資料傾斜問題時,我們經常會採用一種方式 mapjoin,按照hive的實現,mapjoin是將其中一張表在map的過程中載入到記憶體中,但是如果在join的表中,最小的表的資料量也不小的情況下。我們該怎麼辦呢?其中一種解決的方式是 將兩張表需要實現排序 直接用hadoop解決 如下,兩張表都是...

外掛程式的一種安裝方法

今天看到eclipse color themes這款外掛程式,各種心水啊 一直是could not find 我想了一下,可能是一下兩個問題 1 我直接用的是adt自帶的eclipse,可能有bug,導致不能安裝外掛程式。2 網路問題,單位的性質比較特殊,不容許翻牆,所以母雞是不是這個問題。最後,我...

一種計算e的方法

原理 平均e個 0,1 之間的隨機數之和會大於1.原因 n個數之和小於1的概率是1 n 則n個數之和大於1的概率則是1 1 n 恰好n個數之後大於1的概率,等於n個數之後大於1的概率減去n 1個數之和大於1的概率,即 1 1 n 1 1 n 1 n 1 n 則n的期望為 sum n 1 n n su...