近代加密 小額付費

contents

  1. 1. 關於小額付費
  2. 2. 應用層面
    1. 2.1. 網路電子報:
    2. 2.2. 網路期刊購買、資料庫詢問
    3. 2.3. 廣告
    4. 2.4. 網頁閱讀
  3. 3. 何時用
  4. 4. 數學
    1. 4.1. 為什麼可行

關於小額付費

另一個名稱為 微支付 (Micropayment),簡單來說提供顧客 (Consumer) - 銀行 (Broker) - 商家 (Vendor) 三方的交易。小額付費標明在交易金額小,因此交易成本也應該小,否則交易手續的計算能量就超過交易金額,更別說要扣除交易物品的成本。通常要在以下三點最小化

  • 計算資源:
    在先前提到的加密算法中,key 的 bit-length 相當長,導致計算的能量消耗大。倘若只消費 1 元,耗電成本就佔了 1% 以上,甚至更多,那麼是划不來的。
  • 儲存空間花費:
    計算每一組交易明細所需要的空間要最小,例如記錄金額需要 32-bit,那麼 n 次交易就需要 n 個 32-bit 的空間,在其他細節中還需要紀錄額外的購買來源、 … 等。
  • 管理成本:
    第三方 (通常是銀行) 要管理顧客的金額花費、商家是否能取用顧客的錢。銀行要怎麼紀錄顧客的狀態、如何驗證商家真的有跟顧客交易 … 等。

由於交易金額小,即使被破解對雙方的損失也不大。但通常破解手段需要的時間、資源往往超過交易金額,因此不太會有人去破解這個。

應用層面

網路電子報:

一份電子報可能有一些特別的標題內容,若要深入查閱內文,需要讀者付費觀看。這一部分更具有彈性,對於一份具有相當多面向的電子報而言,有些人只看幾個專欄就必須花費購買一整本的金額,有些時候是浪費的。

網路期刊購買、資料庫詢問

網路學術期刊就跟電子報的情況一樣。資料庫詢問比較特別,花費小金額來交換資料庫服務的次數。

廣告

互動式影片、廣告商為了誘拐大眾仔細觀看廣告,由廣告商付錢給觀看者。例如回答問卷回饋、機率性地抽獎回饋 … 等。

網頁閱讀

類似向大眾徵文,鼓勵分享知識。徵求到的文章,由平台供應者支付。

何時用

使用者付費,而非訂閱長時間的垃圾訊息或服務。在大多數的服務商中,會提供時間內無限使用或按照次數計費兩種方案,在大多數的情況下,時間內無限使用是對商家有利,可以預先得到使用者的投資,但使用者在後續時間內可能沒有去使用、或者沒時間去用。

不是 按照次數計費全然好 ,就如 電話費 ,打了多少通電話、講了多久,只有電信商知道,即便告訴花費相當多金額,通話明細也是由他們提供,很難證明到底花了多少,這是對使用者的不利。相較起來,小額付費比較接近投幣式的公共電話,投了多少就打多少,等到快沒有餘額時,再進行補充。

先付款給商家會對使用者不利,有可能取得不好的服務,後付款給商家會對商家不利,因為使用者可能沒有足夠的金額。正因為小額交易,適時地刷新狀態 (再投幣) 就能在之間達到平衡。

數學

由制定 RSA 那伙人 Rivest, Shamir 提供 Payword scheme 的方法。

首先,概念建立在假設不用數字儲存金額 (減少儲存空間、管理花費),而是用運算次數來知道花費金額 (用簡單運算來完成,防止能源消耗過大)。金額花費是整數,由最小單位 1 元構成,如果是在通貨膨脹的國家,最小單位可能不一樣?

那麼可以建立一個儲值金額 n 元的串列如下。

$x_0 \leftarrow x_1 \leftarrow x_2 \leftarrow \text{ ... } \leftarrow x_{n-1} \leftarrow x_n$

由使用者拿一個$x_n$ 初始化,接著利用 hash$x_i = h(x_{i+1})$ 得到每一個硬幣$x_i$。用數學表示遞迴公式$x_i = h^{n-i}(x_n)$

當顧客跟商家交易時,簽一份簽章 (例如用 RSA 或者是 DSA 等方式) 給商家。簽章內容為

$\text{Sign}_C(\text{Merchant-ID} || x_0 || \text{Cert})$

其中 $\text{Cert}$ 是由第三方信任銀行簽署給用戶的內容 (類似銀行帳戶的確認)。最後發送給商家資訊為

$\text{Sign}_C(\text{Merchant-ID} || x_0 || \text{Cert}), \text{Merchant-ID}, x_0, \text{Cert}$

由商人去驗證 (檢查簽證內容、拿對方的 public key 打開,再去拿銀行的 public key 驗證 $\text{Cert}$ 是否正確) 是否是可信任的顧客或者是顧客是否存在。

接下來交易採用最笨的方案,每一次交易 1 元,交付 i 元時,顧客就告知$x_i$ 值給商家,這裡顧客得到硬幣方法為重新計算$x_i = h^{n-i}(x_n)$,可以不事先用記憶體儲存$[x_0, x_n]$,保留 $n$$x_n$ 即可。

之後商家拿著 i 元$x_i$$\text{Sign}_C(\text{Merchant-ID} || x_0 || \text{Cert})$ 的資訊給銀行,銀行計算 $i$ 次 hash$x_0 = h^i(x_i)$ 查看是否正確,若檢驗沒問題,則銀行從客戶存簿撥款給商家。

為什麼可行

運算過程中使用 hash,hash 提供不可逆的操作,因此商家無法有更多金額的索取,假設從顧客手中得到$x_i$,無法計算出$x_{i+1}$ 究竟是什麼,具有一定安全性。而顧客必須由銀行索取簽證,來表示當前的狀態是合法的,顧客沒辦法竄改自己的狀態,使得自己有更多的金錢,銀行那裏會有最新一組的簽章在?應該是吧,銀行會在商家發送驗證資訊時發生異狀檢查顧客是否竄改。

數學之美。