文章目录
群签名方案是算法组 Π G S = ( G e n , S i g n , V e r , O p e n ) \Pi_{GS}=(Gen, Sign, Ver, Open) ΠGS=(Gen,Sign,Ver,Open),
我们说 σ \sigma σ 是 m m m 的正确签名,如果存在 i ∈ [ 1 , n ] i \in [1,n] i∈[1,n] 以及随机带 r r r,使得 σ = S i g n ( g s k [ i ] , m ; r ) \sigma=Sign(gsk[i],m;r) σ=Sign(gsk[i],m;r) 成立。
群签名的安全性只需两条:完全匿名性、完全可追踪性。其他奇奇怪怪的安全性要求都可以由这两条推出。

定义敌手的优势为:
A
d
v
Π
,
A
a
n
o
n
(
λ
,
n
)
=
2
∣
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
(
1
λ
,
n
,
U
1
)
=
1
]
−
1
2
∣
=
∣
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
(
1
λ
,
n
,
1
)
=
1
]
−
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
(
1
λ
,
n
,
0
)
=
0
]
∣
\begin{aligned} Adv_{\Pi,A}^{anon}(\lambda,n) &= 2\left| Pr\left[Expt_{\Pi,A}^{anon}(1^\lambda,n,U_1)=1\right] - \frac{1}{2} \right|\\ &= \left| Pr\left[Expt_{\Pi,A}^{anon}(1^\lambda,n,1)=1\right] - Pr\left[Expt_{\Pi,A}^{anon}(1^\lambda,n,0)=0\right] \right| \end{aligned}
AdvΠ,Aanon(λ,n)=2∣∣∣∣Pr[ExptΠ,Aanon(1λ,n,U1)=1]−21∣∣∣∣=∣∣Pr[ExptΠ,Aanon(1λ,n,1)=1]−Pr[ExptΠ,Aanon(1λ,n,0)=0]∣∣
我们说 Π G S \Pi_{GS} ΠGS 是完全匿名的,如果对于任意 PPT 敌手 A A A,优势 A d v Π , A a n o n ( λ , n ) Adv_{\Pi,A}^{anon}(\lambda,n) AdvΠ,Aanon(λ,n) 是可忽略的。

定义敌手的优势为:
A
d
v
Π
,
A
t
r
a
c
e
(
λ
,
n
)
=
P
r
[
E
x
p
t
Π
,
A
t
r
a
c
e
(
1
λ
,
n
)
=
1
]
Adv_{\Pi,A}^{trace}(\lambda,n) = Pr\left[Expt_{\Pi,A}^{trace}(1^\lambda,n)=1\right]
AdvΠ,Atrace(λ,n)=Pr[ExptΠ,Atrace(1λ,n)=1]
我们说 Π G S \Pi_{GS} ΠGS 是完全可追踪的,如果对于任意 PPT 敌手 A A A,优势 A d v Π , A t r a c e ( λ , n ) Adv_{\Pi,A}^{trace}(\lambda,n) AdvΠ,Atrace(λ,n) 是可忽略的。
密码学部件:

环签名方案是算法组 Π R S = ( G e n , S i g n , V e r ) \Pi_{RS}=(Gen, Sign, Ver) ΠRS=(Gen,Sign,Ver),
若验签通过,那么说明签名是由 R R R 中的某个 v k i vk_i vki 对应的 s k i sk_i ski 所签署的。与群签名相比,环签名是去中心化的,并且参与者的加入退出很容易。缺点是没法追踪恶意的签名者。


定义敌手的优势为:
A
d
v
Π
,
F
E
U
F
−
C
M
A
(
λ
)
=
P
r
[
E
x
p
t
Π
,
F
e
u
f
−
c
o
r
r
u
p
t
−
c
m
a
(
1
λ
)
=
1
]
Adv_{\Pi,F}^{EUF-CMA}(\lambda) = Pr\left[ Expt_{\Pi,F}^{euf-corrupt-cma}(1^\lambda)=1 \right]
AdvΠ,FEUF−CMA(λ)=Pr[ExptΠ,Feuf−corrupt−cma(1λ)=1]
我们说 Π R S \Pi_{RS} ΠRS 是**(内部攻击下)不可伪造的**,如果对于任意 PPT 敌手 F F F,优势 A d v Π , F E U F − C M A ( λ ) Adv_{\Pi,F}^{EUF-CMA}(\lambda) AdvΠ,FEUF−CMA(λ) 是可忽略的。

定义敌手的优势为:
A
d
v
Π
,
A
a
n
o
n
(
λ
)
=
2
∣
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
(
1
λ
,
U
1
)
=
1
]
−
1
2
∣
=
∣
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
(
1
λ
,
1
)
=
1
]
−
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
(
1
λ
,
0
)
=
0
]
∣
\begin{aligned} Adv_{\Pi,A}^{anon}(\lambda) &= 2\left| Pr\left[Expt_{\Pi,A}^{anon}(1^\lambda,U_1)=1\right] - \frac{1}{2} \right|\\ &= \left| Pr\left[Expt_{\Pi,A}^{anon}(1^\lambda,1)=1\right] - Pr\left[Expt_{\Pi,A}^{anon}(1^\lambda,0)=0\right] \right| \end{aligned}
AdvΠ,Aanon(λ)=2∣∣∣∣Pr[ExptΠ,Aanon(1λ,U1)=1]−21∣∣∣∣=∣∣Pr[ExptΠ,Aanon(1λ,1)=1]−Pr[ExptΠ,Aanon(1λ,0)=0]∣∣
我们说 Π G S \Pi_{GS} ΠGS 是基本匿名的,如果对于任意 PPT 敌手 A A A,优势 A d v Π , A a n o n ( λ ) Adv_{\Pi,A}^{anon}(\lambda) AdvΠ,Aanon(λ) 是可忽略的。

定义敌手的优势为:
A
d
v
Π
,
A
a
n
o
n
−
c
o
r
r
u
p
t
(
λ
)
=
2
∣
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
−
c
o
r
r
u
p
t
(
1
λ
,
U
1
)
=
1
]
−
1
2
∣
=
∣
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
−
c
o
r
r
u
p
t
(
1
λ
,
1
)
=
1
]
−
P
r
[
E
x
p
t
Π
,
A
a
n
o
n
−
c
o
r
r
u
p
t
(
1
λ
,
0
)
=
0
]
∣
\begin{aligned} Adv_{\Pi,A}^{anon-corrupt}(\lambda) &= 2\left| Pr\left[Expt_{\Pi,A}^{anon-corrupt}(1^\lambda,U_1)=1\right] - \frac{1}{2} \right|\\ &= \left| Pr\left[Expt_{\Pi,A}^{anon-corrupt}(1^\lambda,1)=1\right] - Pr\left[Expt_{\Pi,A}^{anon-corrupt}(1^\lambda,0)=0\right] \right| \end{aligned}
AdvΠ,Aanon−corrupt(λ)=2∣∣∣∣Pr[ExptΠ,Aanon−corrupt(1λ,U1)=1]−21∣∣∣∣=∣∣∣Pr[ExptΠ,Aanon−corrupt(1λ,1)=1]−Pr[ExptΠ,Aanon−corrupt(1λ,0)=0]∣∣∣
我们说 Π G S \Pi_{GS} ΠGS 是匿名的,如果对于任意 PPT 敌手 A A A,优势 A d v Π , A a n o n − c o r r u p t ( λ ) Adv_{\Pi,A}^{anon-corrupt}(\lambda) AdvΠ,Aanon−corrupt(λ) 是可忽略的。
方法一:类似群签名,使用 NIZKP 将一般签名方案转化为环签名方案。
方法二:真的构成一个环 [RST01],使用 trapdoor OWP 群成员可以在环的某个位置上打开环,然后再关闭环。
设 { H s } \{H_s\} {Hs} 是 CRHF, { F k , F k − 1 } \{F_k,F_k^{-1}\} {Fk,Fk−1} 是 trapdoor OWP,对应的公私钥为 ( p k , s k ) (pk,sk) (pk,sk), Π = ( G e n , E n c , D e c ) \Pi=(Gen, Enc, Dec) Π=(Gen,Enc,Dec) 是对称加密算法,签名算法如下:
盲签名方案是算法组 Π B S = ( G e n , < S , U > , V e r ) \Pi_{BS}=(Gen, <S,U>, Ver) ΠBS=(Gen,<S,U>,Ver),其中 < S , U > <S,U> <S,U> 是签名者和用户之间的交互协议,

定义敌手的优势为:
A
d
v
Π
,
F
E
U
F
−
C
M
A
(
λ
)
=
P
r
[
E
x
p
t
Π
,
F
e
u
f
−
c
m
a
(
1
λ
)
=
1
]
Adv_{\Pi,F}^{EUF-CMA}(\lambda) = Pr\left[ Expt_{\Pi,F}^{euf-cma}(1^\lambda)=1 \right]
AdvΠ,FEUF−CMA(λ)=Pr[ExptΠ,Feuf−cma(1λ)=1]
我们说 Π B S \Pi_{BS} ΠBS 是**(内部攻击下)不可伪造的**,如果对于任意 PPT 敌手 F F F,优势 A d v Π , F E U F − C M A ( λ ) Adv_{\Pi,F}^{EUF-CMA}(\lambda) AdvΠ,FEUF−CMA(λ) 是可忽略的。

定义敌手的优势为:
A
d
v
Π
,
A
b
l
i
n
d
(
λ
)
=
2
∣
P
r
[
E
x
p
t
Π
,
A
b
l
i
n
d
(
1
λ
,
U
1
)
=
1
]
−
1
2
∣
=
∣
P
r
[
E
x
p
t
Π
,
A
b
l
i
n
d
(
1
λ
,
1
)
=
1
]
−
P
r
[
E
x
p
t
Π
,
A
b
l
i
n
d
(
1
λ
,
0
)
=
0
]
∣
\begin{aligned} Adv_{\Pi,A}^{blind}(\lambda) &= 2\left| Pr\left[Expt_{\Pi,A}^{blind}(1^\lambda,U_1)=1\right] - \frac{1}{2} \right|\\ &= \left| Pr\left[Expt_{\Pi,A}^{blind}(1^\lambda,1)=1\right] - Pr\left[Expt_{\Pi,A}^{blind}(1^\lambda,0)=0\right] \right| \end{aligned}
AdvΠ,Ablind(λ)=2∣∣∣∣Pr[ExptΠ,Ablind(1λ,U1)=1]−21∣∣∣∣=∣∣Pr[ExptΠ,Ablind(1λ,1)=1]−Pr[ExptΠ,Ablind(1λ,0)=0]∣∣
我们说 Π B S \Pi_{BS} ΠBS 是盲的,如果对于任意 PPT 敌手 A A A,优势 A d v Π , A b l i n d ( λ ) Adv_{\Pi,A}^{blind}(\lambda) AdvΠ,Ablind(λ) 是可忽略的。
密码学部件:
盲签名的密钥生成算法 G e n ( 1 λ ) Gen(1^\lambda) Gen(1λ) 为:
盲签协议(Blind-signing protocol) < S , U > <S,U> <S,U> 构造如下:

验签算法 V e r ( v k B S , m , ( C σ , π ) ) Ver(vk_{BS},m,(C_\sigma,\pi)) Ver(vkBS,m,(Cσ,π)) 为:
其中,NIZKP
<
P
,
V
>
<P,V>
<P,V> 所证明的关系为:
R
L
(
x
,
w
)
=
1
⟺
x
=
(
C
σ
,
p
k
e
,
C
R
S
C
o
m
,
v
k
,
m
)
w
=
(
u
,
v
,
σ
,
C
)
1)
C
=
C
o
m
(
C
R
S
C
o
m
,
m
;
u
)
2)
1
=
V
e
r
(
v
k
,
C
,
σ
)
3)
C
σ
=
E
n
c
(
p
k
e
,
C
∥
σ
;
v
)
R_L(x,w)=1 \iff \begin{aligned} &x = (C_\sigma,pk_e,CRS_{Com},vk,m)\\ &w = (u,v,\sigma,C)\\ &\textbf{1) }C = Com(CRS_{Com},m;u)\\ &\textbf{2) }1 = Ver(vk,C,\sigma)\\ &\textbf{3) }C_\sigma = Enc(pk_e,C\|\sigma;v)\\ \end{aligned}
RL(x,w)=1⟺x=(Cσ,pke,CRSCom,vk,m)w=(u,v,σ,C)1) C=Com(CRSCom,m;u)2) 1=Ver(vk,C,σ)3) Cσ=Enc(pke,C∥σ;v)
Ruby中是否有一种方法可以使用S/MIME对电子邮件消息进行数字签名?我们的团队使用PKI,我们的用户习惯于期待重要消息的数字签名。我知道我可以调用openssl命令行工具:opensslsmime-sign-signer$CERT_FILE-passinpass:$CERT_PASS-in$UNSIGNED_MAIL-out$SIGNED_MAIL-certfile$CERT_CA_FILE-from'your'-to'recipients'-subject'TheSubject'但我希望利用Ruby解决方案。 最佳答案 我最终
我通过Paperclipgem在Rails应用程序上上传了一些图像,我希望只有后端的管理员能够查看这些图像。因此,我将它们设置为私有(private)。然后我四处搜索解决方案,以了解只有具有特定链接的管理员才能查看文件。这就是我found.我继续尝试这个,但我正在努力创建所需的签名。公式在上面的链接中给出,是:Signature=URL-Encode(Base64(HMAC-SHA1(YourSecretAccessKeyID,UTF-8-Encoding-Of(StringToSign))));StringToSign=HTTP-VERB+"\n"+Content-MD5+"\n"+
我正在使用Foggem生成预签名url。我可以成功执行此操作以获得对该文件的读取权限。这是我的做法:fog_s3=Fog::Storage.new({:provider=>'AWS',:aws_access_key_id=>key,:aws_secret_access_key=>secret})object_path='foo.wav'expiry=Date.new(2014,2,1).to_time.to_iurl=fog_s3.directories.new(:key=>bucket).files.new(:key=>object_path).url(expiry,path_sty
历史:我在Amazon上创建了一个key和pem文件。我创建了一个私有(private)存储桶我创建了一个公共(public)分配并使用原始ID连接到私有(private)存储桶:有效我创建了一个私有(private)分配并像#3一样连接它-现在我得到拒绝访问:预期我很难生成一个有效的url。我一直在尝试按照此处描述的说明进行操作:http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html这就是我到目前为止所得到的......虽然不起作用-
我只是想了解SSL。我已经在我的本地主机上设置了一个Jetty服务器,并使用Keytool生成了我自己的证书.现在当我去https://localhost:8443/我收到无法信任此证书错误。我用keytool-export-aliaspongus-keystorekeystore-filecertfile.cer创建我认为是客户端需要向服务器进行身份验证的证书。(这是我可能大错特错的地方!)我有以下ruby代码:require'net/https'require'openssl'require'open-uri'puts'yay'ifFile.exists?('certfile.ce
我正在尝试在我的Rails服务器上生成一个预签名的url以发送到浏览器,以便浏览器可以上传到S3。aws-sdk-s3似乎是future可以使用的gem。但不幸的是,我还没有找到可以提供清晰度的gem文档。似乎有几种不同的方法可以做到这一点,如果对以下方法的区别有任何指导,我们将不胜感激-使用Aws::S3::Presigner.new(https://github.com/aws/aws-sdk-ruby/blob/master/aws-sdk-core/lib/aws-sdk-core/s3/presigner.rb),但它似乎没有接受对象参数或身份验证凭证。使用Aws::S3::
示例代码:#typed:trueclassKeyGettersig{params(env_var_name:String).returns(KeyGetter)}defself.from_env_var(env_var_name)returnNull.newifenv_var_name.nil?returnnew(env_var_name)enddefinitialize(env_var_name)@env_var_name=env_var_nameenddefto_key"keyfrom#{@env_var_name}"enddefto_s"strfrom#{@env_var_nam
我正在尝试为我的应用程序实现一个简单的许可key方案,但我遇到了重大障碍。我正在按照OpenSSLforLicenseKeys中的示例进行操作.自从该博文写于2004年并且OpenSSL在OSX上已被弃用后,我尝试使用SecurityTransformsAPI代替OpenSSL来完成许可证key验证。但是,我正在使用OpenSSL生成私钥和公钥;许可证key由Ruby网络应用程序使用私钥生成,该应用程序使用来自购买者电子邮件地址的SHA-256摘要的RubyOpenSSL包装器库。问题是,我所做的任何事情似乎都无法使用安全转换API验证的OpenSSL从Ruby生成签名。我正在处理的R
我正在寻找从我的应用程序访问SmugMug的API以获取用户的相册和图像(用户已通过ruby的OmniAuth进行身份验证)。根据SmugMug'sOAuthAPI,OAuth需要六个参数。我可以使用OmniAuth获取token,时间戳应该很简单(Time.now.to_i对吗?)。有两件事我不知道如何生成——oauth_nonce和oauth_signature。根据oauth文档,我通过时间戳生成了nonce,但我该怎么做呢?它是否需要一定的长度并限制为某些字符?当然还有签名。我将如何使用ruby生成HMAC-SHA1签名?我知道oauthgem可以做到这一点,但我宁愿自
我正在使用RubyonRails和AWSgem。我可以获得用于上传和下载的预签名URL。但是当我得到URL时没有文件,因此将acl设置为“public-read”在下载url上不起作用。用例是这样的:1,服务器为用户提供了一个路径,用于将内容上传到我的存储桶,如果没有凭据则该存储桶不可读。2,并且该内容需要稍后公开:任何人都可以阅读。澄清一下:我没有上传文件,我提供了URL供我的用户上传。那时我也想给用户一个公众可读的URL。好像我自己上传文件会容易一些。此外,读取URL需要永不过期。 最佳答案 当您为PUT对象请求生成预签名URL