我正在使用 Google Cloud Scheduler 来调用外部应用程序。Google Cloud Scheduler 使用 OIDC 身份验证并使用服务帐户。我只能从 Google 服务帐户 UI 控制台页面获取服务帐户的私钥。如何公开该用户管理的服务帐户?
我通过在此处粘贴不记名令牌找到了该服务帐户的公钥: https: //jwt.io/
但是,这是获取服务帐户公钥的唯一方法吗?还有其他方法可以得到这个吗?(如图书馆等)?有什么方法可以从 Google utils 或 gcloud 或 Google 控制台获取此信息吗?
其中一个网站提到“公钥可以广泛分发,因此令牌的每个消费者都可以验证其完整性。” 那么,这个Google服务帐户的公钥分发到哪里了?是否有存储所有 Google 服务帐户公钥的服务器/位置?
此外,还可以选择将公钥作为 jwt 令牌的一部分嵌入。如果我从谷歌云调度程序获得不记名令牌,我如何知道它是否嵌入了公钥?或者它是分布式公钥?
预先感谢您的支持!
问候
PS:我读过这些但不是很有帮助:
1.获取 Google 云服务帐户的开发人员密钥 2. https://www.pingidentity.com/fr/company/blog/posts/2019/the-hard-parts-of-jwt-security-nobody-talks-about。 html
encryption-asymmetric public-key-encryption jwt google-cloud-platform openid-connect
我将在我的 flutter 应用程序中使用 cloud firestore 来存储调查问卷中的数据。尽管调查问卷本身并不要求提供个人信息,例如姓名、电话、电子邮件或密码等,但它确实会询问几个问题并产生我不希望 Cloud Firestore 管理员看到的数据。在一次会议期间,人们发现数据安全面临的风险是管理员帐户可能会受到威胁,并且人们将能够查看/导出纯文本数据。我已经为此考虑了端到端加密,但是,我公司内部的指定人员将需要处理数据,因此稍后需要对数据进行解密。
我应该如何加密cloud firestore上的数据,以便
通过谷歌搜索,我的想法是,我也许应该在设备端提供一个公钥,以便对数据库进行加密。我应该保证私钥的安全,这样只有处理数据的人才能稍后解密。
人们是否有用于此目的的工作流程?
抱歉,如果这是一个基本问题!
openssl genrsa -out test1 2048
openssl req -new -key test1 -subj "/CN=foo" -out foo.csr
openssl req -in foo.csr -text
它包含我生成的密钥对的公钥
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:ca:c5:29:98:08:05:30:30:03:08:eb:23:c2:af:
3e:2e:2d:dc:11:96:cb:2f:d1:1f:7f:41:a4:00:13:
8a:ee:4b:36:5b:f2:c1:d1:0f:8b:27:11:34:08:bd:
4d:df:7e:6d:7a:d7:f9:dd:ea:62:ad:fa:8f:8c:eb:
47:5f:55:82:2c:13:c2:11:41:12:b9:87:0b:3d:08:
86:1b:ad:71:16:89:1c:fa:07:4a:86:8f:80:a9:99:
37:f7:e2:d4:d3:d8:b2:5f:7f:c9:05:51:73:f0:c8:
59:ec:c3:09:a2:03:a5:6e:ec:8b:d9:9c:11:de:d3:
df:55:a5:3f:0c:36:d6:93:8a:70:a0:b9:61:cd:c9:
4a:09:ad:f7:3e:fd:ce:6f:5c:bb:00:69:e9:3b:3d:
85:3b:01:1d:8f:6a:a7:d4:61:f9:b5:07:1e:90:ed:
ab:3b:41:cc:db:e8:a0:e7:88:b7:77:35:66:30:b7:
a6:cd:ea:d6:12:f5:ef:82:63:e9:46:29:2e:7c:10:
0e:32:fd:04:2d:cd:62:0e:4b:74:46:f7:fd:f6:4a:
8d:fb:82:9d:37:11:50:ea:9f:f0:d6:64:2b:50:a4:
f0:18:6e:81:28:11:04:db:2a:0a:f7:b1:70:c5:78:
fe:ed:e3:55:2c:64:f4:a5:a0:96:f5:11:3a:27:2c:
5a:51
Exponent: 65537 (0x10001)
Run Code Online (Sandbox Code Playgroud)
我在创建 CSR 时提供的主题属性
Subject: CN=foo
Run Code Online (Sandbox Code Playgroud)
数字签名信息
签名算法:sha256WithRSAEncryption 92:b0:82:a5:aa:98:4a:62:5a:84:8a:15:5c:6f:48:dc:e3:ec:7f:d5:04:e8:c1: 47:55:3c:b3:57:84:16:ff:5a:0d:29:2c:16:f2:cc:0c:18:c3:1f:d5:e1:57:3a:dd:8b: b1:c6:92:c3:fe:cb:2b:9d:7d:79:d5:64:eb:31:00:8b:5e:77:48:ce:66:6f:dd:7b:71: 41:f9:aa:6e:ea:ea:59:e0:cd:f8:db:a9:13:18:d2:2a:fc:12:25:b3:01:44:0c:b1:02: f7:1a:0f:d0:07:04:1d:9f:6f:a1:58:91:87:25:4a:d6:47:a6:b5:4e:3c:a1:fd:b6:6c: c3:96:16: c1:ab:00:d2:4c:95:ee:2c:01:2d:cf:0e:d0:62:1b:4f:0e:34: e3:e8:85:50: 63:74:eb:1f:ac:95:30:d4:df:43:7f:58:11:90:35:29:9d:85:94:dc:c8:c2:29:81:46: 71:20:62:9c:9c:f8:ef:ed:bc:8b:e3:d5:41:b3:14:f7:43:c6:b2:74:c2:22:06:a2:af: 88:68:2e:67:c4:de:ed:61:37:41:d6:df:8a:76:7d:42:5d:98:d3:c9:19:8b:1d:26:73: 92:95:0f:ba:c1:78:3a:55:87:e0:3e:16:13:34:6e:21:13:b9:da:b8:66:f3:0a:ec:79: ae:1a:95:6c:04:cf:b8:b5
以下是我的疑问:
我希望能够转换/显示 AES256 非对称加密图像,即使它看起来是垃圾,我读过一些关于 SO 的内容,建议删除标头,然后重新附加它们,所以即使看起来很疯狂仍然显示它。
重点是我想看看是否可以对使用已知公钥加密的图像数据集执行图像分类。如果我有一张猫的图片,并使用完全相同的密钥对其进行加密,那么结果通常是可重现的,并产生在某种程度上与原始图像相同的图像。
请原谅缺少代码,我不想用我正在考虑的想法来污染讨论,以便从你们可爱的人们那里得到适当的批评——我想说我不是加密专家,因此我在这里寻求建议。
image-processing encryption-asymmetric public-key-encryption
我正在为我的软件实现自动更新机制.服务器上的msi使用signtool进行签名.我的应用程序下载msi并读取下载的msi的公钥.如果公钥与源代码中硬编码的公钥匹配,则它将执行msi并自行更新.
这是否足以确保不会错误地执行恶意msi?我的理解是,如果我的证书签名,文件将只有相同的公钥.
编辑: 在petey的帮助下,我能够检测到msi是否由我的证书签名.但是,这并没有解决我的问题.我仍然可以使用像Orca这样的工具编辑已签名的msi.即使msi不再与签名的msi相同,证书也没有任何变化.因此,当我检查msi是否由我签名时,我得到了.虽然我明白这可能是预期的行为,但必须有一些方法来检测msi是否被篡改?
security cryptography public-key-encryption x509certificate public-key
(此问题最初发布在ServerFault上 - 我已将其删除并将其移至此处.)
我有一台运行PHP 5.3.5的开发机器和一台运行PHP 5.3.8的生产机器.
以下代码在开发计算机上运行:
<?php
$key = "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0x+2RiQ+LCZNAUcl/Ecf1NrTr
lhjOiHaVC+w/y+UJevqVcDstD22OJGwT13B9T47OuQG9BmzcZQYLcShUMhVD/Owu
9+8PcK51EnBd0lym6+z/WixpnqfQonyKiqq5ytmYKUlUv39J8QQUI2geyvY9VpWS
wyNcFUs7wPl2zsLCPQIDAQAB
-----END PUBLIC KEY-----";
$data = "Hello, world!";
$key1 = openssl_get_publickey($key);
print_r ($key1);
echo "<p>";
$res = openssl_public_encrypt($data, $encrypted_data, $key1, OPENSSL_PKCS1_PADDING);
echo base64_encode($encrypted_data);
Run Code Online (Sandbox Code Playgroud)
在我的开发机器上,此代码输出资源和编码字符串.我会在这里复制它,但当然每次都会改变.在生产计算机上,此代码生成资源编号和以下PHP错误:
PHP Warning: openssl_public_encrypt(): Don't know how to get public key from this private key in C:\xxx\test.php on line 15
PHP Warning: openssl_public_encrypt(): key parameter is not a valid public key in C:\xxx\test.php on line 15
Run Code Online (Sandbox Code Playgroud)
遗憾的是,在生产机器上安装旧版本的PHP目前不是一种选择,因为其上运行的其他应用程序至少需要5.3.8.
如果我升级到5.4.x会有帮助吗?
我知道5.3.5上的OpenSSL版本是0.9.8,而5.3.8中的版本是1.0.0.我想那里可能有问题.有什么方法可以解决这个问题吗?
我试图尽可能多地从OpenSSL.org网站和PHP bug跟踪器中找到它,但我不知道我在寻找什么. …
我研究了一个RSA算法的代码,它返回了错误的数字,这恰好是巨大的.我确信我编的所有内容都是正确的,除了我不确定的一行.我不知道如何解决RSA中的私钥,只是飞过它(我看到有人代码
d = e.modInverse(m);
其中d是私钥,e是公钥,m是(p-1)*(q-1).我不明白modInverse方法是如何工作的.长话短说,你如何在没有2个未知数的情况下实际解决'd'(我看到一些方程式说:
d = 1 /(e%m);
我之所以没有发布结果,只是因为返回的数字与加密消息一样大.
package encryptionalgorithms;
import java.math.BigInteger;
import java.util.*;
/**
*
* @author YAZAN Sources:
* http://introcs.cs.princeton.edu/java/78crypto/RSA.java.html
* http://www.math.rutgers.edu/~greenfie/gs2004/euclid.html
* http://www.youtube.com/watch?v=ejppVhOSUmA
*/
public class EncryptionAlgorithms {
private static BigInteger p, q, n, m, e, r, a, b, d, encrypt, decrypt, message, userN, userE, userD;
private static BigInteger one = new BigInteger("1");
private static BigInteger badData = new BigInteger("-1");
private static BigInteger zero = new BigInteger("0");
public static void main(String[] args) {
PKE();
} …Run Code Online (Sandbox Code Playgroud) 在SoapUI工具中我配置了具有传出WS-Security配置的.Jks文件签名是BinarySecurityToken,算法是CanonicalizationMethod和SignatureMethod它正在完美地工作.
现在我尝试使用C#代码,如下所示:
SprintApiService.QueryCsaPortTypeClient client = new QueryCsaPortTypeClient();
ClientCredentials ce = new ClientCredentials();
string fileName = Server.MapPath("");
fileName = fileName + "/test-01.pfx";
ce.ClientCertificate.Certificate = new X509Certificate2(fileName, "tag123");
var val = ce.ClientCertificate.Certificate.GetSerialNumber();
ce.ClientCertificate.SetCertificate("CN=jaitest-01, OU=TPA, OU=BMP, OU=Projects, O=Sprint, C=us", StoreLocation.CurrentUser, StoreName.TrustedPeople);
System.IdentityModel.Selectors.SecurityTokenManager sTokenMgr = ce.CreateSecurityTokenManager();
//var sTokenMgr = ce.CreateSecurityTokenManager();
Run Code Online (Sandbox Code Playgroud)
但我不能成功.我总是得到"拒绝客户(政策)"请帮助我.
这是在SoapUI工具中创建的示例请求:
<wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp wsu:Id="Timestamp-c55ce328-af36-4b0f-97d8-3bab57ee6a46" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2014-02-18T12:27:52Z</wsu:Created>
<wsu:Expires>2014-02-18T12:32:52Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken wsu:Id="SecurityToken-1da2e6b0-3a0d-4943-bcae-de0805d9c4c5" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MIIDmTCCAwKgAwIBAgIERxqCLDANBgkqhkiG9w0BAQUFADAeMQswCQYDVQQGEwJVUzEPMA0GA1UEChMGU3ByaW50MB4XDTExMDgwMjIwMDc0OVoXDTE4MDgwNDA0MDAwMFowYjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBlNwcmludDERMA8GA1UECxMIUHJvamVjdHMxDDAKBgNVBAsTA0JNUDEMMAoGA1UECxMDVFBBMRMwEQYDVQQDEwpzcHJpbnQtbXNvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCG2yDWPQBNG9bjt+sVMzlaooX3jON7tOoqtIxPkXl7XCEvbzZpXL2tYtHXqxVfPo9h1weulbj0dE4LlVjlTjzW4upBI92StqDVYdzTLvZWie1fEslIThHDoX7paQpnrSew3TZ6fk4qVnF4h44J/rLnFt3jLEO6IyRhddganpoOowIDAQABo4IBnjCCAZowCwYDVR0PBAQDAgWgMCsGA1UdEAQkMCKADzIwMTEwODAyMjAwNzQ5WoEPMjAxODA4MDQwNDAwMDBaMBEGCWCGSAGG+EIBAQQEAwIFoDCB5AYDVR0fBIHcMIHZMDagNKAypDAwLjELMAkGA1UEBhMCVVMxDzANBgNVBAoTBlNwcmludDEOMAwGA1UEAxMFQ1JMMjkwgZ6ggZuggZiGSmxkYXA6Ly9jYXg1MDAxLnNwcmludC5jb206Mzg5L289U3ByaW50LGM9VVM/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlhkpsZGFwOi8vY2F4NTAwMi5zcHJpbnQuY29tOjM4OS9vPVNwcmludCxjPVVTP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZTAfBgNVHSMEGDAWgBRFTY2yujBdccYEb58W/Dt7VY3NHzAdBgNVHQ4EFgQUzUEoNuQ9ummaIU8K6h28izpV2YUwCQYDVR0TBAIwADAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIDKDANBgkqhkiG9w0BAQUFAAOBgQCTDjwpnYdx9JZpBrIwm4qIF4tZmXCCUIBEcoER1oUw/NSdgbbRjpU5AxUR/aK1K3taa27HS+WBQYTeMw+Y/LFhp8m+UjHBx/O1kfk4JAz201Kk0HeGgFvt9sscLfK8YD0aavdDJ6Z0rMpHBlcv8VQ7P+1zqJLay3TY+atl9wuD/Q==</wsse:BinarySecurityToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#Timestamp-c55ce328-af36-4b0f-97d8-3bab57ee6a46">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>8H8usvOvRYPwOKHVHdOXO6Y3Cz4=</DigestValue>
</Reference>
<Reference …Run Code Online (Sandbox Code Playgroud) https wsdl web-services ssl-certificate public-key-encryption
我使用SecKeyGeneratePair生成了一个守护者。
var publicKeyPtr, privateKeyPtr: Unmanaged<SecKey>?
let publicKeyParameters: [String: AnyObject] = [
kSecAttrIsPermanent: true,
kSecAttrApplicationTag: "com.example.site.public"
]
let privateKeyParameters: [String: AnyObject] = [
kSecAttrIsPermanent: true,
kSecAttrApplicationTag: "com.example.site.private"
]
let parameters: [String: AnyObject] = [
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits: 2048,
kSecPublicKeyAttrs.takeUnretainedValue() as String: publicKeyParameters,
kSecPrivateKeyAttrs.takeUnretainedValue() as String: privateKeyParameters
]
let result = SecKeyGeneratePair(parameters, &publicKeyPtr, &privateKeyPtr)
let publicKey = publicKeyPtr!.takeRetainedValue()
let privateKey = privateKeyPtr!.takeRetainedValue()
let blockSize = SecKeyGetBlockSize(publicKey)
Run Code Online (Sandbox Code Playgroud)
如果我打印出publicKey,我可以看到模数,我很确定这是我所需要的:
publicKey: <SecKeyRef algorithm id: 1, key type: RSAPublicKey, version: 3, block size: 2048 bits, exponent: …Run Code Online (Sandbox Code Playgroud) 我遇到的问题类似于这里提出的问题.我有我认为是DER编码的RSA PKCS#1公钥,我想用它来验证我的其他数据/签名,但我甚至无法使解码工作.
我使用的是与该问题的解决方案中提出的相同的代码.
ByteQueue queue;
StringSource ss(key, true, new HexDecoder(new Redirector(queue)));
RSASSA_PKCS1v15_SHA_Verifier verifier;
verifier.AccessKey().BERDecodePublicKey(queue, false, 0);
AutoSeededRandomPool prng;
if (!verifier.AccessKey().Validate(prng, 3))
throw Exception(Exception::OTHER_ERROR, "Failed to validate public key");
Run Code Online (Sandbox Code Playgroud)
当我使用在该问题中发布的密钥时,代码可以正常运行,但是当我尝试使用它时,它会失败.我的格式错了吗?别的什么?我对加密很新,所以它可能是愚蠢/明显的东西......
这是我正在尝试使用的密钥.
30819D300D06092A864886F70D010101050003818B0030818702818100B126088
1BDFE84463D88C6AB8DB914A2E593893C10508B8A5ABDF692E9A5419A3EDBAE86
A052849983B75E3B425C18178B260003D857DF0B6505C6CF9C84F5859FCE3B63F
1FB2D4818501F6C5FA4AD1430EEB081A74ABD74CD1F4AA1FCCA3B88DD0548AED3
4443CEB52444EAE9099AA4FE66B2E6224D02381C248025C7044079020111
Run Code Online (Sandbox Code Playgroud)
编辑:
忘了提,这是我得到的错误:
Error!
Dynamic exception type: class CryptoPP::BERDecodeErr
std::exception::what: BER decode error
Run Code Online (Sandbox Code Playgroud) public-key ×3
cryptography ×2
openssl ×2
biginteger ×1
c++ ×1
crypto++ ×1
encryption ×1
https ×1
ios8 ×1
java ×1
jwt ×1
php ×1
pki ×1
rsa ×1
security ×1
swift ×1
web-services ×1
workflow ×1
wsdl ×1