[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FVZR3ETFN43DB3RAJHGDST":3,"skill-same:01M6FVZR3ETFN43DB3RAJHGDST":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":24,"frontMatter":25,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":13,"repositoryHtmlUrl":29,"repositoryHomepageUrl":6,"ownerHtmlUrl":30,"ownerBlogUrl":31,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6FVZR3ETFN43DB3RAJHGDST","azure-keyvault-py",null,"reikiplanet\u002Fdaoskills","reikiplanet","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F96377599?v=4","01M6CVWCMD740YHQDK7E9QYBW4","Reiki Planet","01M6CVWCS4KXVA2CWFVJ43EAXK",0,"MIT","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fdevops\u002Fazure-keyvault-py\u002FSKILL.md",[],[18,19,20],"azure","azure keyvault py","azure keyvault","2026-11-10 10:12:30",false,"---\nname: azure-keyvault-py\ndescription: \"|\"\n  Azure Key Vault SDK for Python. Use for secrets, keys, and certificates management with secure storage.\n  Triggers: \"key vault\", \"SecretClient\", \"KeyClient\", \"CertificateClient\", \"secrets\", \"encryption keys\".\npackage: azure-keyvault-secrets, azure-keyvault-keys, azure-keyvault-certificates\nrisk: unknown\nsource: community\n---\n\n# Azure Key Vault SDK for Python\n\nSecure storage and management for secrets, cryptographic keys, and certificates.\n\n## Installation\n\n```bash\n# Secrets\npip install azure-keyvault-secrets azure-identity\n\n# Keys (cryptographic operations)\npip install azure-keyvault-keys azure-identity\n\n# Certificates\npip install azure-keyvault-certificates azure-identity\n\n# All\npip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity\n```\n\n## Environment Variables\n\n```bash\nAZURE_KEYVAULT_URL=https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\n```\n\n## Secrets\n\n### SecretClient Setup\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.keyvault.secrets import SecretClient\n\ncredential = DefaultAzureCredential()\nvault_url = \"https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\"\n\nclient = SecretClient(vault_url=vault_url, credential=credential)\n```\n\n### Secret Operations\n\n```python\n# Set secret\nsecret = client.set_secret(\"database-password\", \"super-secret-value\")\nprint(f\"Created: {secret.name}, version: {secret.properties.version}\")\n\n# Get secret\nsecret = client.get_secret(\"database-password\")\nprint(f\"Value: {secret.value}\")\n\n# Get specific version\nsecret = client.get_secret(\"database-password\", version=\"abc123\")\n\n# List secrets (names only, not values)\nfor secret_properties in client.list_properties_of_secrets():\n    print(f\"Secret: {secret_properties.name}\")\n\n# List versions\nfor version in client.list_properties_of_secret_versions(\"database-password\"):\n    print(f\"Version: {version.version}, Created: {version.created_on}\")\n\n# Delete secret (soft delete)\npoller = client.begin_delete_secret(\"database-password\")\ndeleted_secret = poller.result()\n\n# Purge (permanent delete, if soft-delete enabled)\nclient.purge_deleted_secret(\"database-password\")\n\n# Recover deleted secret\nclient.begin_recover_deleted_secret(\"database-password\").result()\n```\n\n## Keys\n\n### KeyClient Setup\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.keyvault.keys import KeyClient\n\ncredential = DefaultAzureCredential()\nvault_url = \"https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\"\n\nclient = KeyClient(vault_url=vault_url, credential=credential)\n```\n\n### Key Operations\n\n```python\nfrom azure.keyvault.keys import KeyType\n\n# Create RSA key\nrsa_key = client.create_rsa_key(\"rsa-key\", size=2048)\n\n# Create EC key\nec_key = client.create_ec_key(\"ec-key\", curve=\"P-256\")\n\n# Get key\nkey = client.get_key(\"rsa-key\")\nprint(f\"Key type: {key.key_type}\")\n\n# List keys\nfor key_properties in client.list_properties_of_keys():\n    print(f\"Key: {key_properties.name}\")\n\n# Delete key\npoller = client.begin_delete_key(\"rsa-key\")\ndeleted_key = poller.result()\n```\n\n### Cryptographic Operations\n\n```python\nfrom azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm\n\n# Get crypto client for a specific key\ncrypto_client = CryptographyClient(key, credential=credential)\n# Or from key ID\ncrypto_client = CryptographyClient(\n    \"https:\u002F\u002F\u003Cvault>.vault.azure.net\u002Fkeys\u002F\u003Ckey-name>\u002F\u003Cversion>\",\n    credential=credential\n)\n\n# Encrypt\nplaintext = b\"Hello, Key Vault!\"\nresult = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)\nciphertext = result.ciphertext\n\n# Decrypt\nresult = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)\ndecrypted = result.plaintext\n\n# Sign\nfrom azure.keyvault.keys.crypto import SignatureAlgorithm\nimport hashlib\n\ndigest = hashlib.sha256(b\"data to sign\").digest()\nresult = crypto_client.sign(SignatureAlgorithm.rs256, digest)\nsignature = result.signature\n\n# Verify\nresult = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)\nprint(f\"Valid: {result.is_valid}\")\n```\n\n## Certificates\n\n### CertificateClient Setup\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.keyvault.certificates import CertificateClient, CertificatePolicy\n\ncredential = DefaultAzureCredential()\nvault_url = \"https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\"\n\nclient = CertificateClient(vault_url=vault_url, credential=credential)\n```\n\n### Certificate Operations\n\n```python\n# Create self-signed certificate\npolicy = CertificatePolicy.get_default()\npoller = client.begin_create_certificate(\"my-cert\", policy=policy)\ncertificate = poller.result()\n\n# Get certificate\ncertificate = client.get_certificate(\"my-cert\")\nprint(f\"Thumbprint: {certificate.properties.x509_thumbprint.hex()}\")\n\n# Get certificate with private key (as secret)\nfrom azure.keyvault.secrets import SecretClient\nsecret_client = SecretClient(vault_url=vault_url, credential=credential)\ncert_secret = secret_client.get_secret(\"my-cert\")\n# cert_secret.value contains PEM or PKCS12\n\n# List certificates\nfor cert in client.list_properties_of_certificates():\n    print(f\"Certificate: {cert.name}\")\n\n# Delete certificate\npoller = client.begin_delete_certificate(\"my-cert\")\ndeleted = poller.result()\n```\n\n## Client Types Table\n\n| Client | Package | Purpose |\n|--------|---------|---------|\n| `SecretClient` | `azure-keyvault-secrets` | Store\u002Fretrieve secrets |\n| `KeyClient` | `azure-keyvault-keys` | Manage cryptographic keys |\n| `CryptographyClient` | `azure-keyvault-keys` | Encrypt\u002Fdecrypt\u002Fsign\u002Fverify |\n| `CertificateClient` | `azure-keyvault-certificates` | Manage certificates |\n\n## Async Clients\n\n```python\nfrom azure.identity.aio import DefaultAzureCredential\nfrom azure.keyvault.secrets.aio import SecretClient\n\nasync def get_secret():\n    credential = DefaultAzureCredential()\n    client = SecretClient(vault_url=vault_url, credential=credential)\n    \n    async with client:\n        secret = await client.get_secret(\"my-secret\")\n        print(secret.value)\n\nimport asyncio\nasyncio.run(get_secret())\n```\n\n## Error Handling\n\n```python\nfrom azure.core.exceptions import ResourceNotFoundError, HttpResponseError\n\ntry:\n    secret = client.get_secret(\"nonexistent\")\nexcept ResourceNotFoundError:\n    print(\"Secret not found\")\nexcept HttpResponseError as e:\n    if e.status_code == 403:\n        print(\"Access denied - check RBAC permissions\")\n    raise\n```\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** for authentication\n2. **Use managed identity** in Azure-hosted applications\n3. **Enable soft-delete** for recovery (enabled by default)\n4. **Use RBAC** over access policies for fine-grained control\n5. **Rotate secrets** regularly using versioning\n6. **Use Key Vault references** in App Service\u002FFunctions config\n7. **Cache secrets** appropriately to reduce API calls\n8. **Use async clients** for high-throughput scenarios\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure Key Vault SDK for Python\n\nSecure storage and management for secrets, cryptographic keys, and certificates.\n\n## Installation\n\n```bash\n# Secrets\npip install azure-keyvault-secrets azure-identity\n\n# Keys (cryptographic operations)\npip install azure-keyvault-keys azure-identity\n\n# Certificates\npip install azure-keyvault-certificates azure-identity\n\n# All\npip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity\n```\n\n## Environment Variables\n\n```bash\nAZURE_KEYVAULT_URL=https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\n```\n\n## Secrets\n\n### SecretClient Setup\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.keyvault.secrets import SecretClient\n\ncredential = DefaultAzureCredential()\nvault_url = \"https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\"\n\nclient = SecretClient(vault_url=vault_url, credential=credential)\n```\n\n### Secret Operations\n\n```python\n# Set secret\nsecret = client.set_secret(\"database-password\", \"super-secret-value\")\nprint(f\"Created: {secret.name}, version: {secret.properties.version}\")\n\n# Get secret\nsecret = client.get_secret(\"database-password\")\nprint(f\"Value: {secret.value}\")\n\n# Get specific version\nsecret = client.get_secret(\"database-password\", version=\"abc123\")\n\n# List secrets (names only, not values)\nfor secret_properties in client.list_properties_of_secrets():\n    print(f\"Secret: {secret_properties.name}\")\n\n# List versions\nfor version in client.list_properties_of_secret_versions(\"database-password\"):\n    print(f\"Version: {version.version}, Created: {version.created_on}\")\n\n# Delete secret (soft delete)\npoller = client.begin_delete_secret(\"database-password\")\ndeleted_secret = poller.result()\n\n# Purge (permanent delete, if soft-delete enabled)\nclient.purge_deleted_secret(\"database-password\")\n\n# Recover deleted secret\nclient.begin_recover_deleted_secret(\"database-password\").result()\n```\n\n## Keys\n\n### KeyClient Setup\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.keyvault.keys import KeyClient\n\ncredential = DefaultAzureCredential()\nvault_url = \"https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\"\n\nclient = KeyClient(vault_url=vault_url, credential=credential)\n```\n\n### Key Operations\n\n```python\nfrom azure.keyvault.keys import KeyType\n\n# Create RSA key\nrsa_key = client.create_rsa_key(\"rsa-key\", size=2048)\n\n# Create EC key\nec_key = client.create_ec_key(\"ec-key\", curve=\"P-256\")\n\n# Get key\nkey = client.get_key(\"rsa-key\")\nprint(f\"Key type: {key.key_type}\")\n\n# List keys\nfor key_properties in client.list_properties_of_keys():\n    print(f\"Key: {key_properties.name}\")\n\n# Delete key\npoller = client.begin_delete_key(\"rsa-key\")\ndeleted_key = poller.result()\n```\n\n### Cryptographic Operations\n\n```python\nfrom azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm\n\n# Get crypto client for a specific key\ncrypto_client = CryptographyClient(key, credential=credential)\n# Or from key ID\ncrypto_client = CryptographyClient(\n    \"https:\u002F\u002F\u003Cvault>.vault.azure.net\u002Fkeys\u002F\u003Ckey-name>\u002F\u003Cversion>\",\n    credential=credential\n)\n\n# Encrypt\nplaintext = b\"Hello, Key Vault!\"\nresult = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)\nciphertext = result.ciphertext\n\n# Decrypt\nresult = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)\ndecrypted = result.plaintext\n\n# Sign\nfrom azure.keyvault.keys.crypto import SignatureAlgorithm\nimport hashlib\n\ndigest = hashlib.sha256(b\"data to sign\").digest()\nresult = crypto_client.sign(SignatureAlgorithm.rs256, digest)\nsignature = result.signature\n\n# Verify\nresult = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)\nprint(f\"Valid: {result.is_valid}\")\n```\n\n## Certificates\n\n### CertificateClient Setup\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.keyvault.certificates import CertificateClient, CertificatePolicy\n\ncredential = DefaultAzureCredential()\nvault_url = \"https:\u002F\u002F\u003Cvault-name>.vault.azure.net\u002F\"\n\nclient = CertificateClient(vault_url=vault_url, credential=credential)\n```\n\n### Certificate Operations\n\n```python\n# Create self-signed certificate\npolicy = CertificatePolicy.get_default()\npoller = client.begin_create_certificate(\"my-cert\", policy=policy)\ncertificate = poller.result()\n\n# Get certificate\ncertificate = client.get_certificate(\"my-cert\")\nprint(f\"Thumbprint: {certificate.properties.x509_thumbprint.hex()}\")\n\n# Get certificate with private key (as secret)\nfrom azure.keyvault.secrets import SecretClient\nsecret_client = SecretClient(vault_url=vault_url, credential=credential)\ncert_secret = secret_client.get_secret(\"my-cert\")\n# cert_secret.value contains PEM or PKCS12\n\n# List certificates\nfor cert in client.list_properties_of_certificates():\n    print(f\"Certificate: {cert.name}\")\n\n# Delete certificate\npoller = client.begin_delete_certificate(\"my-cert\")\ndeleted = poller.result()\n```\n\n## Client Types Table\n\n| Client | Package | Purpose |\n|--------|---------|---------|\n| `SecretClient` | `azure-keyvault-secrets` | Store\u002Fretrieve secrets |\n| `KeyClient` | `azure-keyvault-keys` | Manage cryptographic keys |\n| `CryptographyClient` | `azure-keyvault-keys` | Encrypt\u002Fdecrypt\u002Fsign\u002Fverify |\n| `CertificateClient` | `azure-keyvault-certificates` | Manage certificates |\n\n## Async Clients\n\n```python\nfrom azure.identity.aio import DefaultAzureCredential\nfrom azure.keyvault.secrets.aio import SecretClient\n\nasync def get_secret():\n    credential = DefaultAzureCredential()\n    client = SecretClient(vault_url=vault_url, credential=credential)\n    \n    async with client:\n        secret = await client.get_secret(\"my-secret\")\n        print(secret.value)\n\nimport asyncio\nasyncio.run(get_secret())\n```\n\n## Error Handling\n\n```python\nfrom azure.core.exceptions import ResourceNotFoundError, HttpResponseError\n\ntry:\n    secret = client.get_secret(\"nonexistent\")\nexcept ResourceNotFoundError:\n    print(\"Secret not found\")\nexcept HttpResponseError as e:\n    if e.status_code == 403:\n        print(\"Access denied - check RBAC permissions\")\n    raise\n```\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** for authentication\n2. **Use managed identity** in Azure-hosted applications\n3. **Enable soft-delete** for recovery (enabled by default)\n4. **Use RBAC** over access policies for fine-grained control\n5. **Rotate secrets** regularly using versioning\n6. **Use Key Vault references** in App Service\u002FFunctions config\n7. **Cache secrets** appropriately to reduce API calls\n8. **Use async clients** for high-throughput scenarios\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{},"master","dff58085da947e81e8418c922055644bf0082b1b","devops\u002Fazure-keyvault-py","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills","https:\u002F\u002Fgithub.com\u002Freikiplanet","https:\u002F\u002Fwww.reiki-planet.com","Reiki Planet Game","2026-03-29 06:02:29",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add reikiplanet\u002Fdaoskills --skill azure-keyvault-py",{"tool":40,"command":41},"bunx","bunx skills add reikiplanet\u002Fdaoskills --skill azure-keyvault-py",{"tool":43,"command":44},"pnpm","pnpm dlx skills add reikiplanet\u002Fdaoskills --skill azure-keyvault-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fdevops\u002Fazure-keyvault-py\u002FSKILL.md",true,[],[49,76,88,103,123,146],{"skillNo":50,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":21},"01M6G614JTEQJHPT8AKK3YQ18S","web-games","Web browser game development principles. Framework selection, WebGPU, optimization, PWA.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fweb-games\u002FSKILL.md",[],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75],"games","web games","web","grep","principles","selection","community","framework selection","edit","write","read","pwa","game","web browser","game development","Optimization","framework","browser","development","webgpu",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":21},"01M6G611H2YGV0GZFP90D38ZMJ","vr-ar","VR\u002FAR development principles. Comfort, interaction, performance requirements.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fvr-ar\u002FSKILL.md",[],[83,84,74,85,86,62,64,65,66,59,87,60],"ar","vr ar","interaction","requirements","performance",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":21},"01M6G60XNMHAMV1SV0EJ1CX0AY","templates","Project scaffolding templates for new applications. Use when creating new projects from scratch. Contains 12 templates for various tech stacks.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Ftemplates\u002FSKILL.md",[],[90,95,96,97,98,99,62,100,66,101,102,59],"project scaffolding","From Scratch","tech","project","scaffolding","use","projects","applications",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":21},"01M6G60T0GATMK3Q5H8GDC1Z8S","wcag-audit-patterns","Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance. Use when auditing websites for accessibility, fixing WCAG violations, or implementing ac...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fwcag-audit-patterns\u002FSKILL.md",[],[110,111,112,113,114,62,115,116,117,118,100,119,120,121,122],"wcag audit patterns","wcag audit","patterns","WCAG","audit","manual","with","automated testing","guidance","remediation","verification","accessibility","testing",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":21},"01M6G60PMCHW1FRZ63F931QK3R","vulnerability-scanner","Advanced vulnerability analysis principles. OWASP 2025, Supply Chain Security, attack surface mapping, risk prioritization.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fvulnerability-scanner\u002FSKILL.md",[],[130,131,132,133,134,135,136,137,62,66,59,138,60,139,140,141,142,143,144,145],"scanner","vulnerability scanner","vulnerability","prioritization","2025","mapping","chain","supply chain","Bash","analysis","risk","owasp","supply chain security","security","supply","advanced",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":21},"01M6G60JZBB8DK0W3DSG1WNMZK","threat-modeling-expert","Expert in threat modeling methodologies, security architecture review, and risk assessment. Masters STRIDE, PASTA, attack trees, and security requirement extraction. Use for security architecture r...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fthreat-modeling-expert\u002FSKILL.md",[],[153,154,155,156,157,158,159,160,143,100,161,162,163,62,164,165,166,140,167,168],"modeling","threat modeling expert","threat modeling","expert","threat","risk assessment","architecture review","architecture","security architecture review","trees","security architecture","security requirement extraction","assessment","extraction","review","stride"]